|
|
1.1 ! root 1: ;;;;;;;;;;;;;;;;;;;;;;;;;;;; franz.l ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ! 2: ; Franz-dependent PEARL functions, declarations, and initializations ! 3: ; that don't use PEARL functions. ! 4: ; Functions to make Franz accept UCI Lisp functions are in ucisubset.l ! 5: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ! 6: ; Copyright (c) 1983 , The Regents of the University of California. ! 7: ; All rights reserved. ! 8: ; Authors: Joseph Faletti and Michael Deering. ! 9: ! 10: ; Version numbers, major and minor. ! 11: (defvar pearlmajorversion 3) ! 12: (defvar pearlminorversion 9) ! 13: ;3.1: Use of lets and other speedups and new slot encoding. ! 14: ;3.2: Slot encoding applied to speeded-up match. ! 15: ;3.3: New faster hashing. ! 16: ;3.4: Type tags added to symbols, instances, definitions and databases. ! 17: ;3.5: New print functions. ! 18: ;3.6: Made hooks additive and fixed global variables in failed matches. ! 19: ;3.7: Minor bug fixes in scopy and hooks. ! 20: ;3.8: Unification added; minor bug fixes in setv and create. ! 21: ;3.9: Bug fixes in blocks and freezing; selectq becomes selectq*. ! 22: ! 23: ; db: ! 24: (declare (*fexpr builddb)) ! 25: (defvar *pearldb*) ! 26: (defvar *pearlinactivedb*) ! 27: (defvar db) ! 28: (defvar *db1size*) ! 29: (defvar *db2size*) ! 30: ! 31: (defvar *availablesizes* '((-1. . 1.) (0. . 1.) (1. . 1.) (2. . 3.) ! 32: (3. . 7.) (4. . 13.) (5. . 29.) (6. . 61.) ! 33: (7. . 127.) (8. . 127.) (9. . 127.) ! 34: (10. . 127.) (11. . 127.) ! 35: (12. . 127.) (13. . 127.))) ! 36: ;(( ! 37: ; For UCI Lisp or Franz (7. . 127.) (8. . 251.) (9. . 509.) ! 38: ; with vectors (soon?). (10. . 1021.) (11. . 2039.) ! 39: ; (12. . 4093.) (13. . 8191.))) ! 40: ; (setq buildpplst nil) ! 41: ! 42: (defvar *maindb*) ! 43: (defvar *db*) ! 44: (defvar *activedbnames* nil) ! 45: ! 46: ; vars: ! 47: (declare (*fexpr varvalue setv *var* *global* global unbind)) ! 48: (declare (*fexpr block endblock endanyblocks setblock)) ! 49: ! 50: ; hook: ! 51: (defvar *runallslothooks* t) ! 52: (defvar *runallbasehooks* t) ! 53: ! 54: (defvar *runputpathhooks* t) ! 55: (defvar *runclearpathhooks* t) ! 56: (defvar *runaddsetpathhooks* t) ! 57: (defvar *rundelsetpathhooks* t) ! 58: (defvar *runaddpredpathhooks* t) ! 59: (defvar *rundelpredpathhooks* t) ! 60: (defvar *rungetpathhooks* t) ! 61: (defvar *rungetpredpathhooks* t) ! 62: (defvar *rungethookpathhooks* t) ! 63: (defvar *runapplypathhooks* t) ! 64: ! 65: (defvar *runmatchhooks* t) ! 66: (defvar *runsmergehooks* t) ! 67: (defvar *runindividualhooks* t) ! 68: (defvar *runexpandedhooks* t) ! 69: (defvar *runpatternhooks* t) ! 70: (defvar *runnextitemhooks* t) ! 71: (defvar *runfetchhooks* t) ! 72: (defvar *runinsertdbhooks* t) ! 73: (defvar *runremovedbhooks* t) ! 74: (defvar *runindbhooks* t) ! 75: (defvar *runnextequalhooks* t) ! 76: (defvar *runstrequalhooks* t) ! 77: ! 78: ; symord and create and scopy (and all): ! 79: (defvar *pearlunbound*) ! 80: (defvar *equivclass*) ! 81: (defvar *invisible*) ! 82: (defvar *warn* t) ! 83: ! 84: (defvar *pearlsymbol*) ! 85: (defvar *pearldef*) ! 86: (defvar *pearlinst*) ! 87: ! 88: (declare (*fexpr pearlbreak symbol ordinal create cr insidecreate)) ! 89: (defvar nilstruct) ! 90: (defvar d:nilstruct) ! 91: (defvar i:nilstruct) ! 92: (defvar s:nilsym) ! 93: (defvar *lastcreated*) ! 94: (defvar *toplevelp*) ! 95: (defvar *currenttopcreated*) ! 96: (defvar *currenttopalists*) ! 97: (defvar *currenttopcopy*) ! 98: (defvar *currentcreatetype*) ! 99: (defvar *ordinalnames* nil) ! 100: (defvar *globallist* nil) ! 101: ; So that unique numbers start at 0. ! 102: (defvar *lastsymbolnum* -1) ! 103: (defvar *unhashablevalues*) ! 104: (defvar *any*conscell*) ! 105: (defvar *blockstack* nil) ! 106: (defvar *zero-ordinal-value* 0) ! 107: (defvar *currentpearlstructure* nil) ! 108: (defvar *currentstructure* nil) ! 109: (defvar *scopieditems*) ! 110: ! 111: ; path: ! 112: (defvar *pathtop*) ! 113: (defvar *pathlocal*) ! 114: ! 115: ; print: ! 116: (declare (*fexpr foreach quiet)) ! 117: (defvar *fullprint* nil) ! 118: (defvar *abbrevprint* nil) ! 119: (defvar *uniqueprint* nil) ! 120: (defvar *uniqueprintlist* nil) ! 121: (defvar *streamprintlength* 2) ! 122: (defvar *quiet* nil) ! 123: (defvar prinlevel) ! 124: (setq prinlevel 7) ! 125: (defvar printvar) ! 126: (defvar pearltraceprintfn) ! 127: (defvar pearlshowstackprintfn) ! 128: (defvar pearlbreakprintfn) ! 129: (defvar pearlfixprintfn) ! 130: (defvar msgprintfn) ! 131: (defvar pearltracebreakprintfn) ! 132: (defvar pearlprintfn) ! 133: (defvar dskprintfn) ! 134: (defvar trace-printer) ! 135: (setq trace-printer 'pearltraceprintfn) ! 136: (defvar showstack-printer) ! 137: (setq showstack-printer 'pearlshowstackprintfn) ! 138: (defvar top-level-print) ! 139: (setq top-level-print 'pearltracebreakprintfn) ! 140: ! 141: ; if t, then enters and exits to tracing are quiet, ! 142: ; but info is still kept so (tracedump) will work ! 143: (defvar \$tracemute) ! 144: ! 145: ; hash: ! 146: (defvar *stream*) ! 147: (defvar *stream:*) ! 148: (defvar *function-stream:*) ! 149: (defvar *slotvalues* (makhunk 64)) ! 150: (defvar *hashingmarks* (makhunk 64)) ! 151: ; (and via lowlevel.l): ! 152: (defvar *multiproducts* '(16. 256. 4096. 65536. 1048576. 16777216. ! 153: 268435456. 42944967296.)) ! 154: ! 155: ; match: ! 156: (defvar *matchunboundsresult* nil) ! 157: (defvar *globalsavestack* nil) ! 158: (defvar *equivsavestack* nil) ! 159: (defvar *unifyunbounds* nil) ! 160: (defvar xvar) ! 161: (defvar yvar) ! 162: ! 163: ; history: ! 164: (defvar *historynumber* -1.) ! 165: (defvar *historysize* 64.) ! 166: (defvar *usealiases* t) ! 167: (defvar *history* (makhunk *historysize*)) ! 168: (defvar *histval* (makhunk *historysize*)) ! 169: (defvar *printhistorynumber* nil) ! 170: (defvar *readlinechanged*) ! 171: ! 172: ; PEARL-top-level: ! 173: (defvar *firststartup* t) ! 174: (defvar *pearlprompt* '|pearl> |) ! 175: (declare (*fexpr savepearl)) ! 176: ! 177: ; Franz: PEARL-top-level: ! 178: (defvar pearl-title (concat " plus PEARL " ! 179: pearlmajorversion "." ! 180: pearlminorversion)) ! 181: (defvar franz-not-virgin) ! 182: (defvar pearl-top-level-init) ! 183: (defvar top-level) ! 184: (defvar franz-minor-version-number) ! 185: (defvar franz-top-level) ! 186: (defvar +) ! 187: (defvar ++) ! 188: (defvar +++) ! 189: (defvar *) ! 190: (defvar **) ! 191: (defvar ***) ! 192: (defvar ER%tpl) ! 193: (defvar ER%brk) ! 194: (defvar ER%err) ! 195: (defvar evalhook) ! 196: (defvar \$gcprint) ! 197: (defvar funcallhook) ! 198: (defvar tpl-errlist) ! 199: (defvar user-top-level) ! 200: (defvar top-level-eof) ! 201: ! 202: ; PEARL-break-err-handler or trace or fixit debugger: ! 203: (defvar break-level-count) ! 204: (defvar debug-level-count) ! 205: (defvar errlist) ! 206: ! 207: ; (funl (x...) body) expands to (function (lambda (x...) body)). ! 208: (defmacro funl (&rest rest) ! 209: `(function (lambda .,rest))) ! 210: ! 211: ; Various Lisps store functions different ways. Check for ! 212: ; lambda-ness (expr-ness). ! 213: (de islambda (fcn) ! 214: (and (neq 'binary (type fcn)) ! 215: (setq fcn (getd fcn))) ! 216: (or (and (eq 'binary (type fcn)) ! 217: (eq 'lambda (getdisc fcn))) ! 218: (and (dtpr fcn) ! 219: (eq 'lambda (car fcn))))) ! 220: ! 221: ; Tests for an actual literal atom rather than nil!! ! 222: (defmacro reallitatom (potatom) ! 223: `(let ((pot ,potatom)) ! 224: (and (symbolp pot) ! 225: pot))) ! 226: ! 227: ; To avoid problems with UCI Lisp's unbound, we use a special value ! 228: ; for PEARL (pattern-matching) variables to indicate unboundness. ! 229: (dm punbound (none) ! 230: ''*pearlunbound*) ! 231: ! 232: (defmacro pboundp (a) ! 233: `(neq ,a (punbound))) ! 234: ! 235: (defmacro punboundatomp (yyy) ! 236: `(eq ,yyy (punbound))) ! 237: ! 238: ;(aliasdef 'To 'From 'Property) means define To to be the same as From ! 239: ; (under Property in UCILisp). HOWEVER, in Franz it means copy the ! 240: ; function definition of To to From and ignore Property. ! 241: (defmacro aliasdef (to from property) ! 242: `(putd ,to (getd ,from))) ! 243: ! 244: ; vi: set lisp:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.