Commit | Line | Data |
---|---|---|
7129096e C |
1 | Changes to PEARL since the User's Manual. |
2 | ||
3 | 6/26/83 -- Version 3.9: Misc. bug fixes -- distributed with 4.2. | |
4 | -- Fixed a(n embarassingly) large number of bugs in the functions | |
5 | relating to blocks and freezing and thawing variables. User visible | |
6 | changes are that freezeblock and thawblock are now fexprs expecting | |
7 | the name of the block to be frozen. Blocks without names cannot be | |
8 | frozen or thawed individually. A prominent bug was also found in | |
9 | freezebindings which did not work correctly when the structure being | |
10 | frozen had no non-frozen variables of its own. | |
11 | ||
12 | 6/21/83 | |
13 | -- Changed the name of the "selectq" in ucisubset.l to "selectq*" to | |
14 | avoid the new Franz function "selectq" which requires the default case | |
15 | to be labeled with "t" or "otherwise". Changed all PEARL code to use | |
16 | the new Franz selectq. | |
17 | ||
18 | 5/14/83 -- Version 3.8: Unification added. | |
19 | -- Added unification pattern matching as an option, using code written | |
20 | by Dave Chin. To turn on unification, call the function "useunification". | |
21 | There is currently no way to turn it off since the code as written | |
22 | cannot handle old unification results if it doesn't think unification | |
23 | is taking place (controlled by special variable *unifyunbounds*). | |
24 | It is not as expensive as expected so this may be changed. | |
25 | -- Also fixed serious bugs in "setv". | |
26 | ||
27 | 5/12/83 | |
28 | -- Fixed bug in create which caused the mechanism of changing the type | |
29 | of create being done in nested structures to fail. | |
30 | ||
31 | 5/6/83 | |
32 | -- Fixed bug in printing of global adjunct variables. | |
33 | ||
34 | 5/1/83 | |
35 | -- Fixed various major bugs in varreplace. | |
36 | ||
37 | 4/26/83 -- Version 3.7: Two part compilation and minor bug fixes | |
38 | in scopy and hooks. | |
39 | -- Created a way to do a "make" which compiles in two pieces for small | |
40 | machines. Simply define "make pearl" as either "big" or "small" | |
41 | depending on memory size (Less than about 2.5 Mb of memory requires | |
42 | "small"). | |
43 | -- Changed "scopy" and related functions so that the abbreviation on the | |
44 | copy is just gensym'ed from the old abbreviation, without adding ":copy". | |
45 | -- Fixed a bug in the hook functions which caused all slots after the ones | |
46 | with hooks to execute the result (*done*, etc) of the first one. | |
47 | ||
48 | 3/28/83 -- Version 3.6: Inherit all slot hooks and predicates and unbind | |
49 | incorrectly bound global variables after failed match. | |
50 | --- Slot hooks are now always inherited and added to, rather than | |
51 | replaced. If the hooks and predicates of a slot are preceded by "instead" | |
52 | then inheriting doesn't happen and hooks and predicates are replaced. | |
53 | --- Fixed match so that if an unbound global variable is set during a match | |
54 | that later fails, the value is restored to *pearlunbound*. The names of | |
55 | variables that are set are saved in the special variable *globalsavestack*. | |
56 | ||
57 | 3/18/83 -- Version 3.5: New print functions. | |
58 | --- Rewrote all the print functions. Externally, the three old | |
59 | pairs of functions: "valprint"/"valform", "fullprint"/"fullform", | |
60 | and "abbrevprint"/"abbrevform" behave the same. However, there is now | |
61 | a function called "allform" which all of these use which adjusts its | |
62 | treatment of a structure based on several special atoms: | |
63 | 1. *abbrevprint* -- non-nil value causes abbreviations to be used | |
64 | whenever possible. "abbrevform" (and thus "abbrevprint") lambda-binds | |
65 | this to t and calls "allform". "fullform" binds this to nil. | |
66 | 2. *fullprint* -- non-nil value causes complete information | |
67 | including hooks and predicates to be given when present. "fullform" | |
68 | (and thus "fullprint") lambda-binds this to t and calls "allform". | |
69 | "abbrevform" binds this to nil. | |
70 | 3. *uniqueprint* -- described below. | |
71 | 4. *quiet* -- described below. | |
72 | "valform" lambda-binds both to nil which is their default values. | |
73 | Thus, the default action of "allform" used by itself will be like "valform". | |
74 | --- All the default print functions which used to use "valprint" | |
75 | automatically now use "allprint" so that they can all be changed by | |
76 | changes to the default values of *abbrevprint* and *fullprint*. | |
77 | --- The third atom which affects the behavior of all the print functions | |
78 | is *uniqueprint*. If it is given a non-nil value then if a structure | |
79 | is encountered more than once during the same top-level call to a | |
80 | print function, it will be translated into exactly the same cons-cells. | |
81 | This saves on cons-cells and also makes it possible for the "*form" | |
82 | functions to handle circular structures, although "sprint" and thus | |
83 | the "*print" functions can't handle the result. Since most people | |
84 | seldom have duplications within a structure, the default is OFF (nil). | |
85 | The assoc list is stored in the special atom *uniqueprintlist*. | |
86 | --- "form" and "print" functions were added to handle structures, | |
87 | streams and symbols specially. They are called | |
88 | "structureform", "structureprint" "symbolform", "symbolprint", | |
89 | "streamform" and "streamprint" and do not ensure that you give them | |
90 | the right type of value. | |
91 | --- The fourth atom which affects the behavior of all the print | |
92 | functions is *quiet* which, if non-nil, keeps them from running | |
93 | either sprint or the *form function. This is helpful for when you | |
94 | wish to turn off ALL printing in one fell swoop. A function called | |
95 | "quiet" was also added which behaves like progn, except that it | |
96 | lambda-binds *quiet* to t during the evaluation of its arguments, | |
97 | provided a local island of "quiet". | |
98 | ||
99 | 3/8/83 -- Version 3.4: Type tags added. | |
100 | --- Added a field to definitions, structures, symbols, and databases to | |
101 | indicate what they were to speed up type checking. All relevant | |
102 | functions related to structures and databases were changed. | |
103 | --- Fixed some bugs in releasedb. | |
104 | --- Many lowlevel functions in PEARL were changed, but none in ways that would | |
105 | affect most people (because they shouldn't be using the changed functions). | |
106 | ||
107 | 3/4/83 -- Version 3.3: New faster hashing. | |
108 | --- Changed internal code to do the hashing so that it only gets the value | |
109 | out of a slot once instead of as many as 4 times as before. Resulted | |
110 | in about a 5% speedup for structures only hashed a couple of ways. | |
111 | Should be more for multiply hashed items. Should also make new | |
112 | hashing methods easier to add. | |
113 | ||
114 | 2/25/83 -- Version 3.2: Slot encoding applied to speeded-up match. | |
115 | --- Rewrote match functions to use the new slot encoding. Provided | |
116 | about a 10% speedup. | |
117 | --- There are now two different kinds of match function: "standardmatch" | |
118 | and "basicmatch" will only match two structures of the same type. | |
119 | "standardexpandedmatch" and "basicexpandedmatch" will match two | |
120 | structures which are related hierarchically (one above the other) | |
121 | on the slots they have in common. "standardfetch" uses the regular | |
122 | versions and "expandedfetch" uses the expanded versions. | |
123 | ||
124 | 2/21/83 | |
125 | --- Changed all special variables in PEARL to be defined with defvar so | |
126 | that fasl'ing in pearl.o at compile time will automatically declare them | |
127 | special again. | |
128 | ||
129 | 2/17/83 -- Version 3.1: Slot encoding for speed. | |
130 | --- Added major and minor version numbers to PEARL, stored in | |
131 | "pearlmajorversion" and "pearlminorversion" respectively. | |
132 | Started at 3.1 for this version. | |
133 | --- Added new method of storing in slots to speed up some things. | |
134 | --- Putpath, delsetpath, addsetpath and clearpath now will work on a | |
135 | slot with any kind of value or variable in it but result in a constant | |
136 | value. This may cause problems, and if it does it will be "fixed" to | |
137 | worry about what was there and decide what to do to it. | |
138 | --- Scopy no longer throws away bound adjunct variables. | |
139 | --- Many functions listed in the manual as being "proprietary" to PEARL | |
140 | (i.e., not safe to use) have gone away. There are too many to list here. | |
141 | ||
142 | 1/23/83 | |
143 | --- Fixed a bug which made slots inherit hashing when redescribed in an | |
144 | expanded structure unless new hashing was specifically included. | |
145 | --- Added a new "hashing mark" "+", for redescribed slots of expanded | |
146 | structures only, which says copy the old info and add the following | |
147 | new hashing too. It must come first to be effective. | |
148 | Thus, the following should work: | |
149 | (cb x (* a int)) | |
150 | (ce x y (a ^)) | |
151 | (ce x z (+ : a ^)) | |
152 | (ce x w (: + a ^)) ;; anomalous use of + | |
153 | resulting in: | |
154 | * hashing in x, | |
155 | no hashing in y, | |
156 | both * and : hashing in z, | |
157 | and only * hashing in w (because of misplacement of +). | |
158 | ||
159 | 1/19/83 | |
160 | --- Merged the file sprint.l into ucisubset.l. | |
161 | ||
162 | 1/18/83 | |
163 | --- Miscellaneous changes to functions length and others in ucisubset.l | |
164 | to improve efficiency. | |
165 | ||
166 | 1/7/83 | |
167 | --- Changed ,@ to ., in most cases (i.e., whenever equivalent) to | |
168 | avoid an unneeded append generated by the backquote macro. | |
169 | ||
170 | 12/24/82 | |
171 | --- Made change in the definitions of de, df, dm, drm and dsm so that | |
172 | if the special variable *savedefs* is nil then old definitions of functions | |
173 | are not saved. This is especially useful in compiling (and hence assembly | |
174 | and loading) since it will speed it up quite a bit. The saving of the file | |
175 | the definition was in is also disabled. The variable *savedefs* is | |
176 | normally t which causes these macros to act as before, saving the | |
177 | definition, etc. If *savedefs* is nil, then they simply expand into the | |
178 | appropriate defun or setsyntax. The following lines should be | |
179 | included in the file to have this effect only at compile time: | |
180 | (eval-when (compile) | |
181 | (declare (special *savedefs*)) | |
182 | (setq *savedefs* nil)) | |
183 | If you want to permanently disable the saving in your lisp, | |
184 | simply put a | |
185 | (setq *savedefs* nil) | |
186 | in your .lisprc file AFTER the loading of ucisubset.l. | |
187 | ||
188 | 11/12/82 | |
189 | --- Removed association of "remove" with Franz's "delete" so that | |
190 | Franz's remove could be used and fixed all references to "remove" and | |
191 | "dremove", changing many to "delq"s. | |
192 | --- Deleted "powercopy" and redefinition of "copy" now that Franz has | |
193 | correct meaning (doesn't attempt to copy hunks) for copy. | |
194 | ||
195 | 10/30/82 | |
196 | --- All the exprs whose names were of the form XXXX1 where XXXX was the | |
197 | name of a lexpr which was a principle function of PEARL were eliminated | |
198 | (i.e., absorbed by the other form). | |
199 | --- Many small changes to speed up PEARL, including: | |
200 | 1. Changed many progs to lets. | |
201 | 2. Inserted progn's around (or (non-error) | |
202 | (not (msg t .....)) | |
203 | (pearlbreak)) | |
204 | thus eliminating the not and clarifying the meaning. | |
205 | 3. Changed many pops to (setq x (cdr x)) (where popped item not wanted). | |
206 | 4. Changed plus, difference, times and remainder to +&, -&, * and \\. | |
207 | 5. Changed greaterp and lessp to >& and <&. | |
208 | 6. Changed minusp to (<& .. 0) | |
209 | 7. Changed (neq 0 ..) to (not (=& 0 ..)). | |
210 | 8. Eliminated the intermediate exprs insertdb1, fetch1, etc. | |
211 | by converting the basic functions insertdb, fetch to use the | |
212 | &optional syntax. | |
213 | PRELIMINARY RESULTS: | |
214 | 25-33% speedup of various test programs. | |
215 | ||
216 | 10/20/82 | |
217 | --- Added abbreviation "pdb" for "printdb". | |
218 | --- Changed usage of nth, push and pop to use Franz Opus 38.32's new | |
219 | definitions of them, removing them from ucisubset.l. | |
220 | ||
221 | 9/17/82 | |
222 | --- Changed scopy, patternize and varreplace to exprs from macros | |
223 | so that they will compile without complaints of special variables. | |
224 | ||
225 | 9/16/82 | |
226 | --- Added new hashing mechanism using label && and called "hash | |
227 | focusing". If this is found when inserting into the database | |
228 | then the item is hashed as if it were the item in the slot so | |
229 | labelled. This is designed for people using a data base all of | |
230 | whose entries are of the same type (not required, just common | |
231 | for this application) and enables the contents of a slot to be | |
232 | more usefully used to discriminate them (e.g., planfors, inference | |
233 | rules, or almost any such extremely-common binary predicates.) | |
234 | At fetching time, && is considered less useful than *** or ** and more | |
235 | useful than * or nothing (subject to debate and change). (This | |
236 | necessitated the addition of an additional entry in the header of | |
237 | structure definitions, moving everything else down a slot in the hunk.) | |
238 | This differs from & (hash aliasing) in that && hash focussing affects | |
239 | how a structure itself is inserted and fetched, while & simply | |
240 | affects how structures containing this type of structure are | |
241 | treated. For example, suppose the unique numbers of A, B, and C | |
242 | respectively are 1, 2, and 3. C is a symbol. A has one slot X with | |
243 | * and && hashing. B has one slot Y of type symbol with * hashing. | |
244 | Then a structure like (A (X (B (Y C)))) will be indexed the | |
245 | following ways and fetcheverywhere will find it in the following | |
246 | order: | |
247 | && which uses the 2 and 3 from B and its C, (ignoring the 1 of A), | |
248 | and also simply 2 from B. | |
249 | * on A uses type of B thus using 1 and 2. | |
250 | also put under 1 of A without using 2 or 3. | |
251 | If B had an & in its slot then the | |
252 | * on A is affected by & on B thus using 1 and 3 (ignoring the 2 of B). | |
253 | ||
254 | Thus, if you consider A, B, and C to be three levels of information | |
255 | in the structure, an item can be hashed under any combination of two | |
256 | of those levels. The normal * method uses levels 1 and 2, the | |
257 | aliasing & method ignores level 2 and uses levels 1 and 3, and the | |
258 | new focussing && method ignores level 1 and uses levels 2 and 3. | |
259 | In addition, the item can be put under 1, 2 or 3 individually by | |
260 | various combinations of marks (1 = none, 2 = :, 3 = :+&). The only | |
261 | unavailable combination of the 3 is all three. | |
262 | ||
263 | (Added internal-use-only functions are insertbyfocus, removebyfocus, | |
264 | puthashfocus, gethashfocus, recursetoinsidestandardfetch. | |
265 | ||
266 | 9/15/82 | |
267 | --- Added two functions "memmatch" and "memstrequal" which are like | |
268 | "memq" except that they use "match" and "strequal" respectively | |
269 | instead of "eq". | |
270 | --- Added fixes to "scopy" and "patternize" from Dave Chin which allow | |
271 | them to handle circularly linked structures AND to use the same copy | |
272 | of the same structure wherever it appears. This required the addition | |
273 | of a special variable *scopieditems*. This also included a bug fix | |
274 | which added code to store pointers to the new copies in the | |
275 | abbreviation atoms stored in them. | |
276 | --- Added a function called "varreplace" similar to "patternize" which | |
277 | replaces all bound variables in an item with their values, in effect | |
278 | permanently freezing them. | |
279 | --- Added a function called "(intscopy item outeritem)" where intscopy | |
280 | stands for "internal scopy" exactly the same as "(scopy item)" except | |
281 | it does the copying as if the item were internal to outeritem, thus | |
282 | sharing its local and block variables. | |
283 | --- Split create.l into create.l and scopy.l. | |
284 | ||
285 | 9/14/82 | |
286 | --- Moved much of the initialization stuff out of pearl-top-level-init | |
287 | to be done at load time instead. This cut the minimum startup cost | |
288 | for PEARL from 4 seconds to 0.8 seconds CPU. | |
289 | --- Changed setdbsize to remove all current databases before changing | |
290 | the size, warn if *warn* is set and recreate *maindb* with *db* | |
291 | pointing to it. Also fixed a bug when removing the last database. | |
292 | --- Changed the init-files processing to parallel the new Franz method, | |
293 | looking in the current directory, and then the home directory, and | |
294 | looking for .init.prl followed by .o, .l or nothing, and then init.prl | |
295 | followed by .o, .l or nothing. Similarly for start.prl. | |
296 | --- Fixed cleardb so that it doesn't make new cons-cells for the buckets | |
297 | and so that it uses connectdb if the database has a parent. Thus, | |
298 | cleardb is a local database clearer and its effects do not extend up | |
299 | the DB hierarchy. | |
300 | ||
301 | 6/6/82 | |
302 | Added new hashing method. If slots are labelled with *** and all | |
303 | slots so marked are filled with useful values, then the item is hashed | |
304 | under the type of structure plus the values of all these slots. | |
305 | New functions are gethashmulti and puthashmulti. *multiproducts* is a | |
306 | new special atom containing the numbers to multiply the various values | |
307 | with to produce the index (currently powers of 16). | |
308 | ||
309 | 6/3/82 | |
310 | Fixed a bug in fetcheverywhere which caused it to only find the | |
311 | bucket for the first *-ed slot, instead of all of them. (Added | |
312 | to npearl also). | |
313 | ||
314 | 5/28/82 | |
315 | Tried replacing the sequential search method of finding slot numbers | |
316 | for particular slot names with evaluating a concat'ed atom made out | |
317 | of <typename ":" slotname> but timings found it slower so it was | |
318 | removed. | |
319 | ||
320 | 5/27/82 | |
321 | Fixed a problem with storage of variables. Instead of two spots in | |
322 | the hunk, one for the alist (unfrozen variables) and one for the | |
323 | alistcp (frozen variables), there is a special cons cell with these | |
324 | in its car and cdr. This cons cell is pointed to by all substructures | |
325 | so that they can be used in fetches and matches and will be able to | |
326 | unbind or freeze or thaw their variables. Additional special variable | |
327 | is *toplevelalists* (or some such). | |
328 | ||
329 | 5/6/82 | |
330 | --- When an individual (including default instance) structure is created, | |
331 | an abbreviation atom is stored in it. This abbreviation is chosen as | |
332 | follows: | |
333 | 1. If the option of having a structure stored in an atom is used, | |
334 | then that atom is the one used as an abbreviation. Thus | |
335 | (create individual x Pete) | |
336 | will have Pete as a abbreviation. | |
337 | 2. If that option isn't used, then default instances will be | |
338 | given the abbreviation i:x (where x is the structure type name) | |
339 | and individuals at the top level will be given a name newsym-ed | |
340 | from the name of their type. Thus | |
341 | (create base x) will make a default instance abbreviated i:x and | |
342 | (create individual x) will be abbreviated x0 or x1 or whatever. | |
343 | --- New printing and "form-type" functions were added called "abbrevprint" | |
344 | and "abbrevform" which print the abbreviation (if there is one) for | |
345 | any structure below the top level. | |
346 | --- The base name of the type of a slot (i.e., the last word, after | |
347 | setof's are stripped off) is stored for each slot (a more general | |
348 | application of the "ppset" information always stored for integer slots | |
349 | with ordinal types before). This is in preparation for two things: | |
350 | 1. Enforcing such type descriptions. | |
351 | 2. Generating knowledge about the slots of a structure so that the | |
352 | user need not know whether to use fetch or path. | |
353 | ||
354 | 5/5/82 | |
355 | The name of an old slot in a new expanded may be changed by following | |
356 | the new name by the old slotname preceded with an equal sign. Thus | |
357 | for example: | |
358 | pearl> (create base X | |
359 | (A struct)) | |
360 | (X (A (nilstruct))) | |
361 | pearl> (create expanded X Y | |
362 | (B =A) | |
363 | (C .....)) | |
364 | (Y (B (nilstruct)) (C .....))) | |
365 | ||
366 | NOTE that there MAY NOT be a space between the equal sign and the A | |
367 | since = is the read macro which expands =A into (*slot* A) but leaves | |
368 | a single space-surrounded = alone. | |
369 | ||
370 | 4/28/82 | |
371 | --- Adapted PEARL to fit Franz Opus 38.13 so that the atoms | |
372 | showstack-printer and trace-printer are bound to the functions | |
373 | pearlshowstackprintfn and pearltraceprintfn. (Note the addition of | |
374 | "pearl" to the beginning of these). Also changed the name of | |
375 | breakprintfn to pearlbreakprintfn but it is not currently | |
376 | lambda-bindable. | |
377 | --- Adapted the reading of .init.prl and .start.prl files to disable | |
378 | the printing of "[load .init.prl]" by lambda-binding $ldprint to nil | |
379 | first (Franz Opus 38.14). | |
380 | ||
381 | 2/22/82 | |
382 | --- Fixed a bug in the hook disablers. The atoms for path hooks | |
383 | were misnamed in such a way that you couldn't use hidden and | |
384 | visible. Instead of *rungethooks*, and other *run...hooks* | |
385 | forms, they are now *rungetpathhooks* and other *run...pathhooks*. | |
386 | Note that they must be called as (XXXpath ...) and not (path XXX ...) | |
387 | when used with hidden and visible. | |
388 | ||
389 | 2/21/82 | |
390 | --- Added ability to evaluate an atom when expecting a value of a | |
391 | different type (besides integers which already worked this way). | |
392 | For symbols, this is done if the atom isn't a symbol name. | |
393 | For structures, it must evaluate to a structure. | |
394 | For Lisp slots, it may not evaluate to an atom. | |
395 | For setof slots, its value is checked for being of the appropriate | |
396 | type, including depth of nesting. | |
397 | --- Added the fetching function "fetcheverywhere" which gathers | |
398 | ALL the buckets the object could have been hashed into and builds | |
399 | a stream out of all of them (potentially five buckets). Will wait | |
400 | to build an "expandedfetcheverywhere" with its potential of | |
401 | returning 5 times the-depth-of-the-hierarchy buckets. | |
402 | ||
403 | vi: set lisp: |