perm filename MILISY[1,VDS]1 blob
sn#025144 filedate 1973-02-13 generic text, type T, neo UTF8
00100 ~ MILISY: THE MINI-LINGUISTIC SYSTEM
00200 ~ WRITTEN JANUARY 1972 BY TOM MORAN,
00300 ~ COMPUTER SCIENCE DEPARTMENT, CARNEGIE-MELLON UNIVERSITY, PITTSBURGH, PENNSYLVANIA
00400 ~ REVISED JULY 1972
00500 ~ DOCUMENTATION ON REVISIONS FOUND ON PRDOC[206,CCG],TRACE.DOC[206,CCG]
00600
00700 ~ ADDITIONAL REVISIONS FEBRUARY 1973 BY ARTHUR FLEXSER
00800 ~ PSYCHOLOGY DEPARTMENT, STANFORD UNIVERSITY
00900
01000 [PROG ()
01100
01200
01300 [DE CONVERSE () (PROG (F TREE)
01400
01500 (SETQ REPLY @HELLO)
01600 A (PRINT REPLY)
01700 (LISTEN)
01800 (COND ((ATOM STRING) (TERPRI) (RETURN @BYE)))
01900 (SETQ TREE NIL)
02000 (SETQ QUES NIL)
02100 (SETQ ATR NIL)
02200 (PARSE STRING @<S> @((NIL NIL)))
02300 (COND ((NULL TREE) (SETQ REPLY @(I CANT PARSE YOUR INPUT)) (GO A)))
02400 (SETQ F FACTS)
02500 (COND (FACT-TRACE (TERPRI)
02600 (PRINC @"THE FACT LIST IS INITIALLY:")
02700 (PRINT FACTS)
02800 (TERPRI)))
02900 (COND ((NULL (INTERPRET-S TREE)) (SETQ FACTS F)))
03000 (GO A)
03100 ]
03200
03300 [DE LISTEN () (PROG2
03400
03500 (TERPRI) (TERPRI) (PRINC @"**")
03600 (SETQ STRING (READ))
03700 ]
03800
03900 [DF SAY: (L) (SETQ STRING L)]
04000
04100 [DE PS () (PROG2 (SETQ TREE NIL)
04200 (PARSE STRING @<S> @((NIL NIL)))
04300 (PRINTREE TREE)))
04400
04500 [DE I () (INTERPRET-S TREE)]
04600
04700 [DE PSI () (PROG2 (PS) (I))]
04800
04900 [SETQ TREE-TRACE NIL]
05000
05100 [SETQ TF-TRACE NIL]
05200
05300 [DE ATTR (NAME) (INTERN (MAKNAM (CONS @% (EXPLODE NAME))))]
05400
00100 [DF P-RULES (L) (PROG (X Y Z)
00200
00300 A (COND ((NULL L) (RETURN NIL)))
00400 (SETQ X (REVERSE (CADR L)))
00500 (SETQ Y NIL)
00600 (SETQ Z NIL)
00700 B (COND ((NULL X)
00800 (SETQ Z (NCONC (LIST @! Y) Z))
00900 (PUTPROP (CAR L) Z @PRULE)
01000 (SETQ L (CDDR L))
01100 (GO A))
01200 ((EQ (CAR X) @!)
01300 (SETQ Z (CONS Y Z))
01400 (SETQ Y NIL))
01500 (T (SETQ Y (CONS (CAR X) Y))))
01600 (SETQ X (CDR X))
01700 (GO B)
01800 ]
01900
02000 [P-RULES
02100
02200 <S> (<SD> ! <SE> ! <SQ> ! <SEQ> ! <SWH> ! <SAQ> ! <SLQ> ! <SLEQ>)
02300 <SD> (<NP> <VP>)
02400 <VP> (<COP> <PRED>)
02500 <COP> (%BE <NEG>)
02600 <PRED> (<PP> ! <ADJ>)
02700 <SE> (THERE <COP> <NP> <PP>)
02800 <SQ> (%BE <NP> <PRED>)
02900 <SEQ> (%BE THERE <NP> <PP>)
03000 <SWH> (%WH <COP> <PRED>)
03100 <SAQ> (%WH %ATTR %BE <NP>)
03200 <SLQ> (WHERE %BE <NP>)
03300 <SLEQ> (WHERE %BE THERE <NP>)
03400 <NEG> (NOT !)
03500 <PP> (%PREP <NP>)
03600 <NP> (%DET <NP1>)
03700 <NP1> (<MOD1> %NOUN <MOD2>)
03800 <MOD1> (<ADJ> <MOD1> !)
03900 <ADJ> (%COLOR ! %SIZE)
04000 <MOD2> (<SWH> !)
04100 ]
04200
04300 (DEFPROP %BE (IS ARE) SET)
04400 (DEFPROP %PREP (IN ON UNDER NEAR) SET)
04500 (DEFPROP %DET (THE A) SET)
04600 (DEFPROP %SIZE (BIG SMALL) SET)
04700 (DEFPROP %COLOR (RED BLUE GREEN BLACK) SET)
04800 (DEFPROP %NOUN (BOX BALL BLOCK TABLE FLOOR) SET)
04900 (DEFPROP %WH (WHICH WHAT) SET)
05000 (DEFPROP %ATTR (COLOR SIZE) SET)
05100
05200
05300
05400 (DE PARSE (* G STACK) (PROG (ALTS CLASS)
05500 (COND ((SETQ ALTS (GET G @PRULE))
05600 (RPLACD (CDAR STACK) (LIST (LIST G)))
05700 (RETURN (PAR * (CDR ALTS) (CONS (CADDAR STACK) (CONS
05800 (CONS (CAAR STACK) (CDDAR STACK)) (CDR STACK))))))
05900 ((SETQ CLASS (GET G @SET))
06000 (COND ((MEMQ (CAR *) CLASS)
06100 (RPLACD (CDAR STACK) (LIST (LIST G (CAR *)))))
06200 (T (RETURN))))
06300 ((EQ (CAR *) G) (RPLACD (CDAR STACK) (LIST G)))
06400 (T (RETURN)))
06500 (NEXT (CDR *) (CONS (CONS (CAAR STACK)(CDDAR STACK))(CDR STACK)))))
06600
06700 (DE PAR (* ALTS STACK)
06800 (COND ((NULL ALTS))
06900 ((NULL (CAR ALTS)) (RPLACD (CAR STACK) (LIST NIL))
07000 (NEXT * (CDR STACK)))
07100 (T (PARSE * (CAAR ALTS) (CONS (CONS (CDAR ALTS) (CAR STACK))
07200 (CDR STACK)))
07300 (PAR * (CDR ALTS) STACK))))
07400
07500 (DE NEXT (* STACK)
07600 (COND ((AND (NULL *) (NULL (CDR STACK))) (SETQ TREE (CONS
07700 (SUBST 0 0 (CADAR STACK)) TREE)))
07800 ((NULL (CDR STACK)))
07900 ((NULL (CAAR STACK)) (NEXT * (CDR STACK)))
08000 (T (PARSE * (CAAAR STACK) (CONS (CONS (CDAAR STACK) (CDAR STACK))
08100 (CDR STACK))))) )
00100 [DE INTERPRET-S (TREE) (PROG (X SUBTREE)
00200
00300 (COND (TREE-TRACE (PRINTREE TREE)))
00400 (FINDNODE <S> TREE)
00500 (SETQ QUES (OR (T-SEQ) (T-SQ) (T-SWH)(SETQ ATR (T-SAQ))(T-SLQ)(T-SLEQ)))
00600 (COND ((NOT (OR (T-SD) (T-SE) QUES)) (ERROR1) (RETURN NIL)))
00700 NP (COND ((NULL (FINDNODE <NP> TREE)) NIL)
00800 ((INTERPRET-NP SUBTREE) (GO NP))
00900 (T (RETURN NIL)))
01000 (FINDNODE SS TREE)
01100 (COND ((NULL SUBTREE) (GO S)))
01200 (COND ((NOT (OR (T-PRED-ADJ) (T-PRED-PP))) (ERROR1) (RETURN NIL))
01300 ((NOT (OR (T-NNEG) (T-NEG))) (ERROR1) (RETURN NIL)))
01400 S (FINDNODE <S> TREE)
01500 (SETQ X (CDAR SUBTREE))
01600 (COND ((EQ (CAR X) @FIND) (GO FIND))
01700 ((EQ (CAR X) @RECORD)
01800 (RECORD (CADR X))
01900 (SETQ REPLY @(OKAY)))
02000 ((EQ (CAR X) @VERIFY)
02100 (SETQ X (VERIFY (CADR X)))
02200 (SETQ REPLY (COND ((NULL X) @(I DONT KNOW)) ((EQ X @TRUE) @(YES)) (T @(NO)))))
02300 ((EQ (CAR X) @LOCATE) (GO LOCATE))
02400 (T (ERROR1) (RETURN NIL)))
02500 (RETURN T)
02600 FIND (SETQ X (EVAL X))
02700 (SETQ REPLY (COND (ATR (COND ((NULL X) @(I DONT KNOW))
02800 (T X)))
02900 (T (DESCRIBE X))))
03000 (RETURN T)
03100 LOCATE (SETQ X (EVAL X))
03200 (SETQ REPLY (LOCATIONS X))
03300 (RETURN T)
03400 ]
03500
03600 [DE INTERPRET-NP (TREE) (PROG (SUBTREE W X)
03700
03800 (FINDNODE <NP1> TREE)
03900 (SETQ W (WORDS SUBTREE))
04000 (T-NP1)
04100 ADJ (COND ((T-ADJ) (GO ADJ)))
04200 (T-MOD1)
04300 BACK (COND ((T-NREL-CL) (GO ON))
04400 ((FINDNODE <NP> SUBTREE) (COND
04500 ((NULL (INTERPRET-NP SUBTREE)) (RETURN NIL))
04600 (T (GO BACK))))
04700 (T (FINDNODE <NP1> TREE) (T-REL-CL)
04800 (FINDNODE SS SUBTREE)
04900 (T-PRED-ADJ) (T-PRED-PP)
05000 (T-NNEG) (T-NEG)))
05100 ON (FINDNODE AND TREE)
05200 AND (COND ((T-AND) (GO AND)))
05300 (SETQ SUBTREE TREE)
05400 (T-NP)
05500 (COND ((T-INDEF) (RETURN (COND ((NULL (CAR SUBTREE))
05600 (ERROR2) NIL)
05700 (T (CAR SUBTREE))))))
05800 (T-DEF)
05900 (SETQ X (CAR SUBTREE))
06000 (COND ((NULL X) (ERROR2))
06100 ((NULL (CDR X)) (RPLACA SUBTREE (CAR X)) (RETURN (CAR X)))
06200 (T (ERROR3)))
06300 ]
06400
06500 [DE ERROR1 () (SETQ REPLY @(I CANT INTERPRET YOUR SENTENCE))]
06600 [DE ERROR2 () (SETQ REPLY (APPEND @(THERE IS NO) W))]
06700 [DE ERROR3 () (SETQ REPLY (APPEND (APPEND @(I DONT KNOW WHICH) W) @(YOU MEAN)))]
06800
06900 [DF TF (L) (PROG2
07000
07100 (PUTPROP (CAR L) (CDR L) @TF)
07200 (PUTPROP (CAR L) (LIST @LAMBDA NIL (LIST @TFX (LIST @QUOTE (CAR L)))) @EXPR)
07300 ]
07400
07500 [TF T-SD
07600 (<S> (<SD> 1 (<VP> (<COP> 0 2) 3)))
07700 (<S> RECORD (SS 2 1 3))
07800 ]
07900 [TF T-SE
08000 (<S> (<SE> THERE (<COP> 0 1) 2 3))
08100 (<S> RECORD (SS 1 2 (<PRED> 3)))
08200 ]
08300 [TF T-SEQ
08400 (<S> (<SEQ> 0 THERE 1 2))
08500 (<S> VERIFY (SS (<NEG> NIL) 1 (<PRED> 2)))
08600 ]
08700 [TF T-SQ
08800 (<S> (<SQ> 0 1 2))
08900 (<S> VERIFY (SS (<NEG> NIL) 1 2))
09000 ]
09100 [TF T-SWH
09200 (<S> (<SWH> 0 (<COP> 0 1) 2))
09300 (<S> FIND 3 (SS 1 3 2))
09400 (SETV 3 (NEWNUM))
09500 ]
09600 [TF T-SAQ
09700 (<S> (<SAQ> 0 (%ATTR 1) 0 2))
09800 (<S> FIND 3 (4 2 3))
09900 (SETV 4 (ATTR (QUOTE 1)))
10000 ]
10100 [TF T-SLQ
10200 (<S> (<SLQ> 0 0 1))
10300 (<S> LOCATE 1)
10400 ]
10500 [TF T-SLEQ
10600 (<S> (<SLEQ> 0 0 0 1))
10700 (<S> LOCATE 1)
10800 ]
10900 [TF T-PRED-ADJ
11000 (SS 1 2 (<PRED> (<ADJ> (3 4))))
11100 (SS 1 (3 2 4))
11200 ]
11300 [TF T-PRED-PP
11400 (SS 1 2 (<PRED> (<PP> (%PREP 3) 4)))
11500 (SS 1 (3 2 4))
11600 ]
11700 [TF T-NNEG
11800 (SS (<NEG> NIL) 1)
11900 1
12000 ]
12100 [TF T-NEG
12200 (SS (<NEG> NOT) 1)
12300 (NOT 1)
12400 ]
12500
12600 [TF T-NP1
12700 (<NP1> 1 (%NOUN 2) 3)
12800 (<NP1> 4 1 3 (ISA 4 2))
12900 (SETV 4 (NEWNUM))
13000 ]
13100 [TF T-ADJ
13200 (<NP1> 1 (<MOD1> (<ADJ> (2 3)) 4) 5 6)
13300 (<NP1> 1 4 5 (AND 6 (2 1 3)))
13400 ]
13500 [TF T-MOD1
13600 (<NP1> 1 (<MOD1> NIL) 2 3)
13700 (<NP1> 1 2 3)
13800 ]
13900 [TF T-NREL-CL
14000 (<NP1> 1 (<MOD2> NIL) 2)
14100 (<NP1> 1 2)
14200 ]
14300 [TF T-REL-CL
14400 (<NP1> 1 (<MOD2> (<SWH> 0 (<COP> 0 2) 3)) 4)
14500 (<NP1> 1 (AND 4 (SS 2 1 3)))
14600 ]
14700 [TF T-AND
14800 (AND (AND 1 2) . 3)
14900 (AND 1 2 . 3)
15000 ]
15100 [TF T-NP
15200 (<NP> (%DET 1) (<NP1> 2 3))
15300 (<NP> 1 2 3)
15400 ]
15500 [TF T-INDEF
15600 (<NP> A 1 2)
15700 3
15800 (PROG2 (SETV 3 (COND (QUES (FIND 1 2))
15900 (T (CREATE 1 2)))) T)
16000 ]
16100 [TF T-DEF
16200 (<NP> THE 1 2)
16300 3
16400 (PROG2 (SETV 3 (FIND 1 2)) T)
16500 ]
16600 [DE TFX (R) (PROG (N V X)
16700
16800 (SETQ N R)
16900 (SETQ R (GET R @TF))
17000 (SETQ V (MATCH NIL (CAR R) (CAR SUBTREE)))
17100 (COND ((NULL V) (RETURN NIL)))
17200 (COND ((NULL (CDDR R)) (GO A)))
17300 (SETQ X (SUBSTITUTE V (CADDR R)))
17400 (COND ((NULL (EVAL X)) (RETURN NIL)))
17500 A (SETQ X (SUBSTITUTE V (CADR R)))
17600 (RPLACA SUBTREE X)
17700 (COND (TREE-TRACE (PRINT (LIST @APPLY N)) (PRINTREE TREE))
17800 (TF-TRACE (PRINT N)))
17900 (RETURN T)
18000 ]
00100 [DE PRINTREE (TREE) (PROG2 (PRINTR (CAR TREE) (LIST NIL)) @*)]
00200
00300 [DE PRINTR (X M) (PROG ()
00400 (COND ((NULL X) (PRINC @")") (RETURN NIL)))
00500 (TERPRI)
00600 (MAPC (FUNCTION (LAMBDA (Z) (PRINC @" "))) M)
00700 (COND ((ATOM X) (PRINC X) (RETURN NIL)))
00800 (COND ((AND (ATOM (CADR X)) (OR (NULL (CDDR X)) (AND
00900 (NULL (CDDDR X)) (ATOM (CADDR X))))) (PRINC X) (RETURN)))
01000 (PRINC @"(") (PRINC (CAR X))
01100 (SETQ M (CONS NIL M))
01200 (MAPC (FUNCTION (LAMBDA (Y) (PRINTR Y M))) (APPEND (CDR X) @(NIL)))
01300 ]
01400
01500 [DE WORDS (X) (PROG (W Z)
01600
01700 (SETQ Z (LIST NIL))
01800 (SETQ W Z)
01900 (WORD (CAR X))
02000 (RETURN (CDR Z))
02100 ]
02200
02300 [DE WORD (X) (COND
02400
02500 ((ATOM X) (COND ((NULL X) NIL)
02600 ((GET X @PRULE) NIL)
02700 ((GET X @SET) NIL)
02800 (T (RPLACD W (LIST X)) (SETQ W (CDR W)))))
02900 (T (WORD (CAR X)) (WORD (CDR X)))
03000 ]
03100
03200
03300 [DE SETV (N X) (SETQ V (CONS (CONS N X) V))]
03400
03500 [DE NEWNUM () (SETQ NEWNUM (ADD1 NEWNUM))]
03600
03700 (SETQ NEWNUM 100)
03800
03900 [DF FINDNODE (N) (PROG (%TREE Y)
04000
04100 (SETQ %TREE (EVAL (CADR N)))
04200 (SETQ N (CAR N))
04300 (COND ((EQ (CAAR %TREE) N) (RETURN (SETQ SUBTREE %TREE)))
04400 (T (RETURN (SETQ SUBTREE (FINDNODE1 (CAR %TREE))))))
04500 ]
04600
04700 [DE FINDNODE1 (X) (COND
04800
04900 ((ATOM X) NIL)
05000 ((ATOM (CAR X)) (FINDNODE1 (CDR X)))
05100 ((EQ (CAAR X) N) (RETURN X))
05200 ((SETQ Y (FINDNODE1 (CAR X))) (RETURN Y))
05300 (T (FINDNODE1 (CDR X)))
05400 ]
05500
05600
05700
05800 [DE MATCH (V F E) (PROG (X) (RETURN (COND ((NULL (MACH F E)) NIL) (V V) (T T))))]
05900
06000 [DE MACH (F E) (COND
06100
06200 ((EQ F E) T)
06300 ((NUMBERP F) (COND ((ZEROP F) T)
06400 ((SETQ X (ASSOC F V)) (EQUAL (CDR X) E))
06500 (T (SETQ V (CONS (CONS F E) V)) T)))
06600 ((ATOM F) NIL)
06700 ((ATOM E) NIL)
06800 (T (AND (MACH (CAR F) (CAR E))
06900 (MACH (CDR F) (CDR E))))
07000 ]
07100
07200 [DE SUBSTITUTE (V X) (PROG (Y) (RETURN (SUBS X)))]
07300
07400 [DE SUBS (X) (COND
07500
07600 ((NUMBERP X) (COND ((SETQ Y (ASSOC X V)) (CDR Y)) (T X)))
07700 ((ATOM X) X)
07800 (T (CONS (SUBS (CAR X)) (SUBS (CDR X))))
07900 ]
08000
08100
08200
08300 [SETQ FACTS NIL]
08400
08500 [SETQ FACT-TRACE NIL]
08600
08700 [DE RECORD (S) (COND
08800
08900 ((EQ (CAR S) @AND) (MAPC (FUNCTION RECORD) (CDR S)))
09000 (FACT-TRACE (TERPRI)
09100 (PRINC @"ADDING TO FACT LIST:")
09200 (PRINT S)
09300 (SETQ FACTS (CONS S FACTS))
09400 (TERPRI))
09500 (T (SETQ FACTS (CONS S FACTS)))
09600 ]
09700
09800 [DF CREATE (L) (PROG (X)
09900
10000 (SETQ X (GENSYM))
10100 (RECORD (SUBSTITUTE (LIST (CONS (CAR L) X)) (CADR L)))
10200 (RETURN X)
10300 ]
10400
10500 [DE VERIFY (S) (PROG (X)
10600
10700 (COND ((EQ (CAR S) @AND) (GO A))
10800 ((EQ (CAR S) @OR) (GO B))
10900 (T (RETURN (VERIFY1 S))))
11000 A (COND ((NULL (SETQ S (CDR S))) (RETURN @TRUE))
11100 ((NOT (EQ (SETQ X (VERIFY1 (CAR S))) @TRUE)) (RETURN X)))
11200 (GO A)
11300 B (COND ((NULL (SETQ S (CDR S))) (RETURN @FALSE))
11400 ((EQ (VERIFY1 (CAR S)) @TRUE) (RETURN @TRUE)))
11500 (GO B)
11600 ]
11700
11800 [DE VERIFY1 (S) (PROG (F N Y1 Z1 PR L)
11900
12000 (SETQ F FACTS)
12100 (COND ((EQ (CAR S) @NOT) (SETQ N (SETQ K (CADR S)))
12200 (SETQ PR @NOT))
12300 (T (SETQ N (LIST @NOT S)) (SETQ K S)))
12400 (SETQ Y1 (CADR K))
12500 (SETQ Z1 (CADDR K))
12600 (COND ((AND (ATOM Y1)(ATOM Z1)) (GO A))
12700 ((ATOM Y1) (SETQ Y1 (LIST Y1)))
12800 ((ATOM Z1) (SETQ Z1 (LIST Z1))))
12900 (GO B)
13000 A (COND ((NULL F) (RETURN NIL))
13100 ((EQUAL (CAR F) S) (RETURN @TRUE))
13200 ((EQUAL (CAR F) N) (RETURN @FALSE)))
13300 (SETQ F (CDR F))
13400 (GO A)
13500 B (SETQ L (COMBINE (CAR K) Y1 Z1))
13600 (COND (PR (SETQ L (MAPCAR (FUNCTION (LAMBDA (X)
13700 (CONS PR (LIST X)))) L))))
13800 (RETURN (VERIFY (CONS @OR L)))
13900 ]
14000
14100 [DF FIND (L) (PROG (V X Z)
14200
14300 (SETQ V (CAR L))
14400 (SETQ L (CADR L))
14500 (SETQ L (COND ((EQ (CAR L) @AND) (CDR L))
14600 (T (LIST L))))
14700 (SETQ X (FIND1 V (CAR L)))
14800 (COND ((NULL (SETQ L (CDR L))) (RETURN X)))
14900 (SETQ L (CONS @AND L))
15000 A (COND ((NULL X) (RETURN Z))
15100 ((EQ (VERIFY (SUBSTITUTE (LIST (CONS V (CAR X))) L)) @TRUE)
15200 (SETQ Z (CONS (CAR X) Z))))
15300 (SETQ X (CDR X))
15400 (GO A)
15500 ]
15600
15700 [DE FIND1 (M S) (PROG (F X Z PR S1 S2)
15800
15900 (COND ((EQ (CAR S) @NOT) (SETQ PR @NOT)(SETQ S (CADR S))))
16000 (COND ((ATOM (CADDR S)) (GO C)))
16100 (SETQ S1 (SUBST (CAADDR S) (CADDR S) S))
16200 (SETQ S2 (SUBST (CDADDR S) (CADDR S) S))
16300 (GO D)
16400 C (COND ((ATOM (CADR S)) (GO B)))
16500 (SETQ S1 (SUBST (CAADR S)(CADR S) S))
16600 (SETQ S2 (SUBST (CDADR S)(CADR S) S))
16700 D (COND (PR (SETQ S1 (CONS PR (LIST S1)))
16800 (SETQ S2 (CONS PR (LIST S2)))))
16900 (RETURN (UNION (FIND1 M S1) (FIND1 M S2)))
17000 B (COND (PR (SETQ S (CONS PR (LIST S)))))
17100 (SETQ F FACTS)
17200 A (COND ((NULL F) (RETURN Z)))
17300 (SETQ X (MATCH NIL S (CAR F)))
17400 (SETQ X (ASSOC M X))
17500 (COND (X (SETQ Z (CONS (CDR X) Z))))
17600 (SETQ F (CDR F))
17700 (GO A)
17800 ]
17900
18000 [DE DESCRIBE (L) (PROG (Z)
18100
18200 (COND ((NULL L) (RETURN @(NOTHING))))
18300 (MAPC (FUNCTION DESCRIBE1) L)
18400 (RETURN (CDR Z))
18500 ]
18600
18700 [DE DESCRIBE1 (X) (PROG (Y)
18800
18900 (SETQ Y (FIND1 99 (LIST @ISA X 99)))
19000 (SETQ Y (NCONC (FIND1 99 (LIST @%COLOR X 99)) Y))
19100 (SETQ Y (NCONC (FIND1 99 (LIST @%SIZE X 99)) Y))
19200 (SETQ Z (NCONC Y Z))
19300 (SETQ Z (NCONC (LIST @AND @THE) Z))
19400 (RETURN (CDR Z))
19500 ]
19600
19700 [DF LOCATE (X) (PROG (F Y Z)
19800
19900 (COND ((ATOM (CAR X))(SETQ X (LIST X))))
20000 (SETQ F FACTS)
20100 (SETQ PREPS (GET @%PREP @SET))
20200 A (COND ((NULL F) (RETURN Z)))
20300 (SETQ Y (CAR F))
20400 (COND ((NOT (MEMQ (CAR Y) PREPS)) (GO B))
20500 ((MEMQ (CADR Y) (CAR X)) (SETQ Z (CONS Y Z))))
20600 B (SETQ F (CDR F))
20700 (GO A)
20800 ]
20900
21000 [DE LOCATIONS (L) (PROG (Z)
21100
21200 (COND ((NULL L) (RETURN @(I DONT KNOW))))
21300 (MAPC (FUNCTION LOC1) L)
21400 (RETURN (CDR Z))
21500 ]
21600
21700 [DE LOC1 (X) (PROG (Y)
21800
21900 (SETQ Y (DESCRIBE1 (CADDR X)))
22000 (SETQ Y (NCONC (LIST (CAR X)) Y))
22100 (SETQ Z (NCONC (LIST @AND) Y))
22200 ]
22300
22400 [DE COMBINE (SP L1 L2)
22500
22600 (COND ((NULL L2) NIL)
22700 (T (APPEND (COMBINE SP L1 (CDR L2))
22800 (COMBINE1 L1 (CAR L2)))))
22900 ]
23000
23100 [DE COMBINE1 (L X)
23200
23300 (COND ((NULL L) NIL)
23400 (T (CONS (LIST SP (CAR L) X) (COMBINE1 (CDR L) X))))
23500 ]
23600
23700
23800 [DE UNION (U V)
23900
24000 (COND ((NULL U) V)
24100 ((MEMQ (CAR U) V) (UNION (CDR U) V))
24200 (T (CONS (CAR U) (UNION (CDR U) V))))
24300 ]
24400
00100
00200 (SETQ *NOPOINT T)
00300 (RETURN @"MINI-LINGUISTIC SYSTEM READY") ]