Annotation of 43BSD/ucb/lisp/pearl/update.ms, revision 1.1.1.1

1.1       root        1: .ND
                      2: .nr LL 75n
                      3: .nr LT 80n
                      4: .rm CF
                      5: .ds LH PEARL Documentation
                      6: .ds CH Update
                      7: .ds RH Page %
                      8: .po 1.50i
                      9: .ls 1
                     10: .hy 14
                     11: .LP
                     12: .bp 76
                     13: .DS C
                     14: .LG
                     15: \fBUpdate of Changes
                     16: Through
                     17: PEARL 3.9
                     18: April 1983\fR
                     19: .SM
                     20: .DE
                     21: .SH
                     22: 1. Introduction
                     23: .PP
                     24: This appendix describes the changes that have been made to PEARL since
                     25: the original manual was produced.
                     26: It is designed to parallel the sections of the manual so that the
                     27: original index can be used to find changes.
                     28: .PP
                     29: PEARL is now distributed with Franz Lisp (starting with Opus 38.58).
                     30: The earliest version of PEARL distributed (with 38.58) was PEARL 3.6.
                     31: The current update corresponds to version 3.9 and is being distributed
                     32: with the Franz Opus 38.69 available with 4.2 BSD Unix.
                     33: The current major and minor version numbers for PEARL are stored in
                     34: the special variables \fIpearlmajorversion\fR and \fIpearlminorversion\fR
                     35: respectively.
                     36: .PP
                     37: With the change in mail protocols and addition of new machines at
                     38: Berkeley, the form of addresses for bugs and suggestions have been
                     39: simplified.
                     40: Bugs, suggestions or queries should be sent to 
                     41: \fIPearl\-Bugs@Berkeley\fR or \fIucbvax!pearl\-bugs\fR.
                     42: .SH
                     43: 2. Running PEARL
                     44: .PP
                     45: PEARL is currently only maintained under Franz Lisp.
                     46: The current version could be moved back to UCI Lisp (or to other
                     47: Lisps) fairly easily but has not been for lack of need.
                     48: Lisp Machine Lisp is the most likely Lisp that PEARL will be moved
                     49: to next but it has not been done, mostly because of conflicts in the
                     50: use of the colon character and lack of access to a Lisp Machine.
                     51: .SH
                     52: 2.1 Under Franz Lisp
                     53: .PP
                     54: Since PEARL is now part of Franz Lisp, it should be available as
                     55: \fI/usr/ucb/pearl\fR or wherever you find \fIlisp\fR on your system.
                     56: .PP
                     57: The \fI.start.pearl\fR and \fI.init.pearl\fR files are actually
                     58: called \fIstart.prl\fR and \fIinit.prl\fR and may optionally be
                     59: prefixed with a dot "." and/or suffixed with either ".o" or ".l" just
                     60: as in Franz.
                     61: The use of the dot prefix and of the ".o" or ".l" is preferred
                     62: and fastest.
                     63: Thus PEARL will read the first file found in the following
                     64: sequence: \fI.init.prl.o\fR, \fI.init.prl.l\fR, \fI.init.prl\fR,
                     65: \fIinit.prl.o\fR, \fIinit.prl.l\fR, or \fIinit.prl\fR and similarly
                     66: for \fIstart.prl\fR.
                     67: Franz's special variable \fI$ldprint\fR is lambda-bound to \fInil\fR during
                     68: the reading of these two files to disable the printing of
                     69: "[load .init.prl]".
                     70: .SH
                     71: 5. Accessing Slots of Structures
                     72: .PP
                     73: Doing a "\fIpath \fBput\fR" on a slot containing a variable will
                     74: not set the variable.
                     75: Rather it replaces the variable with the value provided. 
                     76: .SH
                     77: 10. Printing Structures, Symbols and Other PEARL Objects
                     78: .PP
                     79: The various printing functions still exist but all call a single
                     80: formatting function with various options controlled by special atoms.
                     81: The principle functions are \fBallform\fR which does the building of a
                     82: printable list form for internal PEARL structures and \fBallprint\fR
                     83: which calls \fIallform\fR.
                     84: \fIAllform\fR uses the following global variables to determine what
                     85: form to build:
                     86: .IP 1.
                     87: \fB*abbrevprint*\fR -- a non-\fInil\fR value causes abbreviations
                     88: to be used whenever possible for any structure except the top level
                     89: structure passed to a print function.
                     90: Abbreviations are described at the end of this section.
                     91: The new functions \fBabbrevform\fR and \fBabbrevprint\fR
                     92: lambda-bind this to \fIt\fR and then call \fIallform\fR.
                     93: \fIfullform\fR binds this to \fInil\fR.
                     94: .IP 2.
                     95: \fB*fullprint*\fR -- a non-\fInil\fR value causes complete information
                     96: including hooks and predicates to be given when present.
                     97: \fIFullform\fR (and thus \fIfullprint\fR) lambda-binds this to \fIt\fR
                     98: and calls \fIallform\fR.
                     99: \fIAbbrevform\fR binds this to \fInil\fR.
                    100: .LP
                    101: \fIValform\fR lambda-binds both to \fInil\fR.
                    102: The default value of both is are also \fInil\fR, so that the default action of
                    103: \fIallform\fR when used by itself will be like \fIvalform\fR unless these
                    104: special variables are changed.
                    105: All the default print functions automatically use \fIallprint\fR so that
                    106: they can all be changed by changes to the default values of
                    107: \fI*abbrevprint*\fR and \fI*fullprint*\fR.
                    108: .LP
                    109: Two other special atoms which affect the behavior of all the printing
                    110: functions are:
                    111: .IP 3.
                    112: \fB*uniqueprint*\fR -- a non-\fInil\fR value causes a structure which is
                    113: encountered more than once during the same top-level call to a
                    114: print function to be translated into exactly the same cons-cells.
                    115: This saves on cons-cells and also makes it possible for the \fI\-\-form\fR
                    116: functions to handle circular structures, although \fIsprint\fR and thus
                    117: the \fI\-\-print\fR functions cannot handle the result.
                    118: Since most people seldom have duplications within a structure,
                    119: the default is \fInil\fR (off).
                    120: The assoc\-list of already translated structures is stored in the
                    121: special atom \fB*uniqueprintlist*\fR.
                    122: .IP 4.
                    123: \fB*quiet*\fR -- a non-\fInil\fR value disables all printing by any of
                    124: PEARL's print functions, providing an easy way to disable printing
                    125: all at once.
                    126: There is also a function called \fBquiet\fR which behaves like
                    127: \fIprogn\fR, except that it lambda-binds \fI*quiet*\fR to \fIt\fR
                    128: during the evaluation of its arguments, providing a local island
                    129: of "quiet".
                    130: .PP
                    131: The standard print functions are designed to handle any Lisp structure.
                    132: Thus, they spend a significant amount of time determining what kind of
                    133: object they have been passed.
                    134: For situations in which you know exactly what type of object you want
                    135: printed, the functions 
                    136: \fBstructureform/structureprint\fR, \fBsymbolform/symbolprint\fR,
                    137: and \fBstreamform/streamprint\fR are provided.
                    138: They assume you know what you are doing and do not ensure that
                    139: you give them the right type of value.
                    140: .PP
                    141: Adapting PEARL to fit an improvement in Franz, the atoms
                    142: \fIshowstack-printer\fR and \fItrace-printer\fR are bound to
                    143: the functions \fBpearlshowstackprintfn\fR and \fBpearltraceprintfn\fR.
                    144: \fBNote\fR the addition of "pearl" to the beginning of these.
                    145: The name of \fIbreakprintfn\fR was also changed to
                    146: \fBpearlbreakprintfn\fR but it is not currently lambda-bindable.
                    147: .SH
                    148: 10.1. Abbreviations
                    149: .PP
                    150: As people build larger deeper structures it becomes useful to have
                    151: some of them abbreviated during printing if they are internal to the
                    152: structure being printed.
                    153: When an individual (including default instance) structure is created,
                    154: an abbreviation atom is stored in it.
                    155: This abbreviation is chosen as follows:
                    156: .IP 1.
                    157: If the option in \fIcreate\fR of having a structure automatically
                    158: stored in an atom is used, then that atom is the one used as an
                    159: abbreviation.
                    160: Thus the structure created by \fI(create individual x Pete)\fR will
                    161: be given the abbreviation \fIPete\fR.
                    162: .IP 2.
                    163: If that option is not used, then default instances will be
                    164: given the abbreviation \fIi:x\fR (where x is the structure type name)
                    165: and individuals at the top level will be given a name \fInewsym\fR-ed
                    166: from the name of their type.
                    167: Thus \fI(create base x)\fR will make a default instance abbreviated
                    168: \fIi:x\fR and the first structure created with \fI(create individual x)\fR
                    169: will be abbreviated \fIx0\fR.
                    170: .IP 3.
                    171: \fIScopy\fR and related functions that create new structures from old
                    172: ones \fIgensym\fR the new structure's abbreviation from that of the
                    173: old structure.
                    174: .SH
                    175: 11. Error Messages, Bugs, and Error Handling Abilities
                    176: .PP
                    177: Bugs, complaints and suggestions of useful features (to be added to
                    178: the current list of 30 or so things on the wish list) should be
                    179: mailed by electronic mail to \fBPearl\-Bugs@Berkeley\fR or
                    180: \fBucbvax!pearl\-bugs\fR.
                    181: .SH
                    182: 12. Short-Circuiting and Redirecting Create Using !, $ and Atoms
                    183: .PP
                    184: If an atom is encountered where a value-description was expected in
                    185: any type of slot, and it is bound to a value of the right type,
                    186: its value is inserted into the slot.
                    187: For \fIsymbols\fR, this is done if the atom is not a symbol name.
                    188: For \fIstructures\fR, the atom must evaluate to a structure.
                    189: For \fILisp\fR slots, it must simply be bound.
                    190: For \fIsetof\fR slots, its value is checked for being of the appropriate
                    191: type, including depth of nesting.
                    192: .PP
                    193: Note also that a change in the internal representation has made it possible
                    194: to allow \fBeven atoms\fR in slots of type \fIlisp\fR.
                    195: .SH
                    196: 13. More Flexible Hash Selection
                    197: .PP
                    198: Because we have never gotten around to adding fetch functions to take
                    199: advantage of colon and colon-colon hashing and these two methods
                    200: really are not useful in normal fetching, they are currently ignored.
                    201: .PP
                    202: For situations in which you wish to create an expanded structure and
                    203: add new hashing marks to an old slot (rather than replace them),
                    204: preceding new hash marks with a plus ("+") will cause the old
                    205: hashing information to be copied before processing the new hashing.
                    206: .PP
                    207: Thus, the sequence
                    208: .DS
                    209: (cb x (* a int))
                    210: (ce x y (a ^))
                    211: (ce x z (+ : a ^))
                    212: (ce x w (: + a ^)) ; anomalous use of +
                    213: .DE
                    214: will result in:
                    215: .DS
                    216: * hashing in x,
                    217: no hashing in y,
                    218: both * and : hashing in z, and
                    219: only * hashing in w (because of misplacement of +).
                    220: .DE
                    221: .PP
                    222: Several new hashing methods have been added to PEARL.
                    223: .PP
                    224: A hashing mechanism using the label \fB***\fR has been added called
                    225: "triple-star hashing".
                    226: If slots are labeled with *** and \fBall\fR slots so marked are filled
                    227: with useful values, then the item is hashed under the type of structure
                    228: plus the values of all these slots.
                    229: During fetching, this is considered the most useful (that is,
                    230: specific) hash method.
                    231: .PP
                    232: A hashing mechanism using the label \fB&&\fR has been added called
                    233: "hash focusing".
                    234: It is designed for people using a data base all of
                    235: whose entries are of the same type (not required, just common
                    236: for this application) and enables the contents of a single slot
                    237: to be used to better discriminate them.
                    238: Examples of such structures are "planfors", inference rules,
                    239: or almost any other such extremely-common binary predicates.
                    240: If a slot labeled && is found when inserting into the database then
                    241: the item is hashed as if it were the item in the slot so labeled.
                    242: At fetching time, && is considered less useful than *** or **
                    243: and more useful than * or nothing.
                    244: .PP
                    245: This differs from & (hash aliasing) in that hash focusing
                    246: affects how a structure itself is inserted and fetched, while
                    247: & simply affects how structures containing this type of
                    248: structure are treated.
                    249: For example, suppose the unique numbers of A, B, and C
                    250: respectively are 1, 2, and 3.
                    251: C is a symbol.
                    252: A has one slot X with * and && hashing.
                    253: B has one slot Y of type symbol with * hashing.
                    254: Then a structure like (A (X (B (Y C)))) will be indexed the
                    255: following ways and \fIfetcheverywhere\fR (see below) will find
                    256: it in the following order: the && method will be used first
                    257: which uses the 2 and 3 from B and its C, (ignoring the 1 of A),
                    258: and also simply 2 from B;
                    259: the * on A uses the type of B thus using 1 and 2;
                    260: it is also looked for under the 1 of A without using 2 or 3.
                    261: If B had an & in its slot then the * on A is affected by & on B thus
                    262: using 1 and 3 (ignoring the 2 of B).
                    263: .PP
                    264: Thus, if you consider A, B, and C to be three levels of information
                    265: in the structure, an item can be hashed under any combination of two
                    266: of those levels.
                    267: The normal * method uses levels 1 and 2,
                    268: the aliasing & method ignores level 2 and uses levels 1 and 3,
                    269: and the new focussing && method ignores level 1 and uses levels 2 and 3.
                    270: In addition, the item can be put under 1, 2 or 3 individually by
                    271: various combinations of marks (1 = none, 2 = :, 3 = :+&).
                    272: The only unavailable combination of the three is all of them.
                    273: .SH
                    274: 16. Attaching Hooks to Structures (If-Added Demons)
                    275: .PP
                    276: Slot hooks are now always inherited and added to, rather than replaced.
                    277: If the hooks and predicates of a slot are preceded by \fBinstead\fR
                    278: then inheriting does not happen and hooks and predicates are replaced.
                    279: .PP
                    280: The atoms for path hooks were misnamed in such a way that you could not
                    281: use \fIhidden\fR and \fIvisible\fR.
                    282: Instead of \fI*rungethooks*\fR, and other \fI*run...hooks*\fR forms,
                    283: they are now \fB*rungetpathhooks*\fR and other \fB*run...pathhooks*\fR.
                    284: Note that they must be called as (\fIXXX\fRpath ...) and not
                    285: (path\ \fIXXX\fR ...) when used with \fIhidden\fR and \fIvisible\fR.
                    286: .SH
                    287: 17. Creating and Manipulating Multiple Data Bases
                    288: .PP
                    289: The function \fIsetdbsize\fR can now be done at any time and
                    290: will remove all current databases before changing the size,
                    291: warn the user (if \fI*warn*\fR is set) and recreate \fI*maindb*\fR
                    292: with the special variable \fI*db*\fR pointing to it.
                    293: .PP
                    294: The function \fIcleardb\fR is now a local database clearer
                    295: and its effects do not extend up the database hierarchy.
                    296: .SH
                    297: 19. Creating Expanded Subtypes of Previously Defined Objects
                    298: .PP
                    299: Hashing in old slots inherited by new expanded structures can now be
                    300: added to by preceding the new hash marks with plus ("+").
                    301: See section 13 above.
                    302: .PP
                    303: The name of an old slot inherited by a new expanded structure may be
                    304: changed by following the new name by the old slotname preceded with
                    305: an equal sign.
                    306: Thus for example:
                    307: .DS
                    308: pearl> (create base X (A struct))
                    309:     (X (A (nilstruct)))
                    310: pearl> (create expanded X Y (B =A) (C .....))
                    311:     (Y (B (nilstruct)) (C .....)))
                    312: .DE
                    313: Note that there may not be a space between the equal sign and the slot
                    314: name since \fI=\fR is a read macro which expands \fI=A\fR into
                    315: \fI(*slot* A)\fR but leaves a single space-surrounded equal sign alone.
                    316: The actual effect is to add another name to the slot so that it can be
                    317: later referenced with either name.
                    318: .SH
                    319: 20. Fetching Expanded Structures
                    320: .PP
                    321: A fetching function called \fBfetcheverywhere\fR exists which gathers
                    322: \fBall\fR the buckets the object could have been hashed into and
                    323: builds a stream out of all of them (potentially five buckets).
                    324: There is currently no "expanded" counterpart, since it has the potential
                    325: of returning \fI5 times the-depth-of-the-hierarchy\fR buckets.
                    326: .SH
                    327: 21.2 The Matching Process
                    328: .PP
                    329: During matching, if an unbound global variable is set and
                    330: the match later fails, the value is restored to \fI*pearlunbound*\fR.
                    331: The names of variables that are set are saved in the special variable
                    332: \fB*globalsavestack*\fR.
                    333: .PP
                    334: Formerly, there was only one match function which was used by both
                    335: \fIstandardfetch\fR and \fIexpandedfetch\fR and which therefore would
                    336: match two structures if they were hierarchically related.
                    337: This is really inappropriate for the standard fetching, so 
                    338: there are now two regular match functions, \fIstandardmatch\fR and
                    339: \fIbasicmatch\fR, which will only match two structures of the same type,
                    340: and two expanded match functions, \fIstandardexpandedmatch\fR and
                    341: \fIbasicexpandedmatch\fR, which will match two structures which are
                    342: related hierarchically (one above the other) on the slots they have
                    343: in common.
                    344: Streams built by \fIstandardfetch\fR use the regular versions and
                    345: and streams built by \fIexpandedfetch\fR use the expanded versions.
                    346: .PP
                    347: There are now two functions \fBmemmatch\fR and \fBmemstrequal\fR which
                    348: are like \fImemq\fR except that they use \fImatch\fR and \fIstrequal\fR
                    349: respectively instead of \fIeq\fR.
                    350: .PP
                    351: As of version 3.8, PEARL will now do \fBunification\fR of variables in
                    352: pattern matching.
                    353: To turn it on, call the function \fBuseunification\fR.
                    354: (The current implementation precludes turning it off once it is on but
                    355: this may be remedied in later versions if we can figure out what it
                    356: means to stop unifying.)
                    357: .SH
                    358: 26. Looping and Copying Functions
                    359: .PP
                    360: The function \fIscopy\fR no longer deletes bound adjunct variables.
                    361: .PP
                    362: The standard Franz function \fIcopy\fR is no longer redefined since
                    363: the standard version now avoids the copying of hunks.
                    364: .PP
                    365: The functions \fIscopy\fR and \fIpatternize\fR are now exprs rather
                    366: than macros.
                    367: .PP
                    368: The new function \fBvarreplace\fR permanently "freezes" the values
                    369: of slots containing bound variables by replacing all bound variables
                    370: in an item with their values.
                    371: .PP
                    372: A variation on \fIscopy\fR called \fBintscopy\fR ("internal scopy")
                    373: is designed to do the copying as if the copied item were internal to
                    374: another outer item, thus sharing its local and block variables.
                    375: Its arguments are the item to be copied and the outer item in whose
                    376: scopy the copying should be done.
                    377: .SH
                    378: 29. Appendix of UCI Lisp functions added to Franz PEARL
                    379: .PP
                    380: The definitions of \fIde\fR, \fIdf\fR, \fIdm\fR, \fIdrm\fR and \fIdsm\fR
                    381: have been modified so that if the special variable \fB*savedefs*\fR
                    382: is \fInil\fR then old definitions of functions are not saved.
                    383: This is especially useful in compiling (and as a result, assembly
                    384: and loading) since it will speed them up quite a bit.
                    385: This also disables the saving of the name of the file that the
                    386: definition was in.
                    387: The variable \fI*savedefs*\fR is normally \fIt\fR which causes these
                    388: macros to act as before, saving the definition, etc.
                    389: If \fI*savedefs*\fR is \fInil\fR, then they simply expand into the
                    390: appropriate \fIdefun\fR or \fIsetsyntax\fR.
                    391: The following lines should be included in a file to have this effect
                    392: only at compile time:
                    393: .DS
                    394: (eval-when (compile)
                    395:        (declare (special *savedefs*))
                    396:        (setq *savedefs* nil))
                    397: .DE
                    398: .LP
                    399: If you also want to permanently disable this feature in a lisp, that
                    400: loads \fIucisubset.l\fR, simply put a \fI(setq *savedefs* nil)\fR
                    401: in your \fI.lisprc\fR file AFTER the loading of \fIucisubset.l\fR.
                    402: .PP
                    403: The function \fIremove\fR is no longer made equivalent to Franz's
                    404: \fIdelete\fR so that Franz's \fIremove\fR can be used.
                    405: The functions \fInth\fR, \fIpush\fR and \fIpop\fR are no longer
                    406: defined by PEARL, since the new Franz versions are better.
                    407: (UCI Lisp users note: This switches the arguments to \fIpush\fR.)
                    408: .SH
                    409: 32. Index of Global Variables and Functions With Their Arguments
                    410: .PP
                    411: All special variables in PEARL are now defined with \fIdefvar\fR so
                    412: that \fIfasl\fR'ing in \fIpearl.o\fR at compile time will automatically
                    413: declare them special again.
                    414: .PP
                    415: All the exprs whose names were of the form \fIXXXX1\fR where
                    416: \fIXXXX\fR was the name of a lexpr which was a principle function
                    417: of PEARL were eliminated (i.e., absorbed by the other form).
                    418: .SH
                    419: 34. Compiling Lisp+PEARL Files.
                    420: .PP
                    421: To compile a file of mixed Lisp and PEARL functions with \fIliszt\fR,
                    422: you must first load in the function definitions and special
                    423: declarations of PEARL by loading the object code.  
                    424: This is the file \fIpearl.o\fR which is normally kept in the
                    425: \fI/usr/lib/lisp\fR directory and will found automatically by
                    426: \fIload\fR.
                    427: .PP
                    428: Thus, the following should normally be included at the
                    429: beginning of a PEARL file you wish to compile:
                    430: .DS
                    431: (eval-when (compile)
                    432:        (declare (special defmacro-for-compiling))
                    433:        (setq defmacro-for-compiling t)
                    434:        (load 'pearl.o))
                    435: (declare (macros t))
                    436: .DE
                    437: .rm CF
                    438: .rm LH
                    439: .rm CH
                    440: .rm RH
                    441: .bp
                    442: .DS C
                    443: .LG
                    444: \fBUpdate of Changes
                    445: Through
                    446: PEARL 3.9
                    447: April 1983
                    448: .sp 1
                    449: Table of Contents\fR
                    450: .SM
                    451: .DE
                    452: .DS L
                    453: 1.  Introduction                                                                                           \ka76
                    454: 2.  Running PEARL               \h'|\nau'76
                    455:       2.1.  Under Franz Lisp    \h'|\nau'76
                    456: 5.  Accessing Slots of Structures \h'|\nau'76
                    457: 10. Printing Structures, Symbols and Other PEARL Objects \h'|\nau'76
                    458:       10.1.  Abbreviations \h'|\nau'77
                    459: 11. Error Messages, Bugs, and Error Handling Abilities \h'|\nau'78
                    460: 12. Short-Circuiting and Redirecting \fICreate\fR Using !, $ and Atoms \h'|\nau'78
                    461: 13. More Flexible Hash Selection \h'|\nau'78
                    462: 16. Attaching Hooks to Structures (If-Added Demons) \h'|\nau'79
                    463: 17. Creating and Manipulating Multiple Data Bases \h'|\nau'80
                    464: 19. Creating Expanded Subtypes of Previously Defined Objects \h'|\nau'80
                    465: 20. Fetching Expanded Structures \h'|\nau'80
                    466: 21.2  The Matching Process \h'|\nau'80
                    467: 26. Looping and Copying Functions \h'|\nau'81
                    468: 29. Appendix of UCI Lisp functions added to Franz PEARL \h'|\nau'81
                    469: 32. Index of Global Variables and Functions With Their Arguments \h'|\nau'81
                    470: 34. Compiling Lisp+PEARL Files \h'|\nau'82
                    471: .DE

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.