Start part 2
This commit is contained in:
parent
571161ff84
commit
7637ab4c95
6
paip.asd
6
paip.asd
|
@ -7,4 +7,8 @@
|
||||||
:version "0.0.1"
|
:version "0.0.1"
|
||||||
:serial t
|
:serial t
|
||||||
:components ((:file "package")
|
:components ((:file "package")
|
||||||
(:file "paip")))
|
(:file "part-1")
|
||||||
|
(:file "part-2")
|
||||||
|
(:file "part-3")
|
||||||
|
(:file "part-4")
|
||||||
|
(:file "part-5")))
|
||||||
|
|
|
@ -0,0 +1,261 @@
|
||||||
|
(|SYSTEM|::|VERSION| '(20080430.))
|
||||||
|
#0Y_ #0Y |CHARSET|::|UTF-8|
|
||||||
|
#Y(#:|1 3 (IN-PACKAGE #:PAIP)-1|
|
||||||
|
#17Y(00 00 00 00 00 00 00 00 20 01 DA 31 F6 0F 01 19 01)
|
||||||
|
("PAIP" |COMMON-LISP|::|*PACKAGE*|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|6 11 (DEFPARAMETER *TITLES* '(MD SR. JR. ...) ...)-2|
|
||||||
|
#26Y(00 00 00 00 00 00 00 00 20 01 DA 31 62 DB DC 31 5A DB DD DE 2D 03 05 C6
|
||||||
|
19 01)
|
||||||
|
((|COMMON-LISP|::|SPECIAL| |PAIP|::|*TITLES*|) |PAIP|::|*TITLES*|
|
||||||
|
(|PAIP|::|MD| |PAIP|::|SR.| |PAIP|::|JR.| |PAIP|::|SIR|)
|
||||||
|
|COMMON-LISP|::|VARIABLE| "Titles aren't part of names."
|
||||||
|
|SYSTEM|::|%SET-DOCUMENTATION|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|13 17 (DEFUN FIRST-NAME (NAME) ...)-3|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|FIRST-NAME| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|FIRST-NAME|
|
||||||
|
#29Y(00 00 00 00 01 00 00 00 26 02 94 01 6B 00 38 03 8C C1 04 9E 5B 19
|
||||||
|
02 95 01 29 01 03 6D)
|
||||||
|
(|PAIP|::|*TITLES*|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|NAME|)
|
||||||
|
"Select the first name from a NAME represented as a list." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|19 21 (DEFUN LAST-NAME (NAME) ...)-4|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LAST-NAME| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LAST-NAME|
|
||||||
|
#17Y(00 00 00 00 01 00 00 00 26 02 AD 72 63 2F 00 19 02)
|
||||||
|
(|PAIP|::|FIRST-NAME|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|NAME|)
|
||||||
|
"Select the last name from a NAME represented as a list." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|23 31 (DEFUN POWER (N M) ...)-5|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|POWER| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|POWER|
|
||||||
|
#37Y(00 00 00 00 02 00 00 00 26 03 AD 8E AC 11 AD DA 90 01 2F 0E AE AF
|
||||||
|
97 03 6C 70 33 02 39 19 03 C5 19 03 9F 19 03)
|
||||||
|
(1.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|N| |PAIP|::|M|) "Raise N to an integer power M." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|33 44 (DEFUN COUNT-ATOMS (EXPR) ...)-6|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|COUNT-ATOMS| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|COUNT-ATOMS|
|
||||||
|
#38Y(00 00 00 00 01 00 00 00 26 02 92 01 09 C5 19 02 C6 19 02 93 01 77
|
||||||
|
9E 20 77 94 01 6C 76 95 02 6C 72 33 02 37 19 02)
|
||||||
|
(0. 1.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|EXPR|) "Count how many atoms are in EXPR, disregarding NIL."
|
||||||
|
1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|46 52 (DEFUN COUNT-ALL-ATOMS (EXPR &OPTIONAL #) ...)-7|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|COUNT-ALL-ATOMS| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|COUNT-ALL-ATOMS|
|
||||||
|
#45Y(00 00 00 00 01 00 01 00 26 08 3B 01 0B C5 F9 92 02 09 9E 19 03 C5
|
||||||
|
19 03 93 02 77 9F 20 77 94 02 DA 6C 67 95 03 DB 6C 62 33 02 37 19
|
||||||
|
03)
|
||||||
|
(1. 0.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|EXPR| |COMMON-LISP|::|&OPTIONAL| (|PAIP|::|IF-NULL| 1.))
|
||||||
|
"Count all atoms in EXPR, including NILs only in non-tail position." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|54 64 (DEFUN COUNT-ANYWHERE (OBJ EXPR &OPTIONAL ...) ...)-8|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|COUNT-ANYWHERE| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|COUNT-ANYWHERE|
|
||||||
|
#57Y(00 00 00 00 02 00 01 00 26 09 3B 01 15 C5 F9 92 02 13 C6 19 04 C7
|
||||||
|
19 04 AD B0 B0 36 02 1C 76 C6 19 04 93 02 6D 9F 20 70 AF 94 03 AF
|
||||||
|
6C 5C B0 95 04 B0 6C 56 33 02 37 19 04)
|
||||||
|
(#.#'|COMMON-LISP|::|EQ| 0. 1.)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|OBJ| |PAIP|::|EXPR| |COMMON-LISP|::|&OPTIONAL|
|
||||||
|
(|PAIP|::|TEST| #'|COMMON-LISP|::|EQ|))
|
||||||
|
"Count how many times an OBJ appears anywhere in an EXPR." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|66 73 (DEFUN DOT-PRODUCT (LIST1 LIST2) ...)-9|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|DOT-PRODUCT| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|DOT-PRODUCT|
|
||||||
|
#20Y(00 00 00 00 02 00 00 00 26 03 DA DB B0 B0 33 01 16 9B 00 03)
|
||||||
|
(#.#'|COMMON-LISP|::|+| #.#'|COMMON-LISP|::|*|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|LIST1| |PAIP|::|LIST2|)
|
||||||
|
"Compute the dot product of LIST1 and LIST2" 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|76 80 (DEFUN MAPPEND (FN LIST) ...)-10|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|MAPPEND| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|MAPPEND|
|
||||||
|
#19Y(00 00 00 00 02 00 00 00 26 03 DA AF AF 33 00 16 9B 00 03)
|
||||||
|
(#.#'|COMMON-LISP|::|APPEND|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|FN| |COMMON-LISP|::|LIST|)
|
||||||
|
"Apply FN to each element of LIST and append the results." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|82 84 (DEFUN ONE-OF (SET) ...)-11|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|ONE-OF| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|ONE-OF|
|
||||||
|
#17Y(00 00 00 00 01 00 00 00 26 02 AD 6F 00 61 01 19 02)
|
||||||
|
(|PAIP|::|RANDOM-ELT|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|COMMON-LISP|::|SET|) "Pick one element of SET, and make a list of it."
|
||||||
|
1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|86 88 (DEFUN RANDOM-ELT (CHOICES) ...)-12|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|RANDOM-ELT| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|RANDOM-ELT|
|
||||||
|
#22Y(00 00 00 00 01 00 00 00 26 02 AD AE 72 62 38 01 72 F7 32 5E 19 02)
|
||||||
|
() (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|CHOICES|) "Choose a random element from list CHOICES." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|90 97 (DEFPARAMETER *SIMPLE-GRAMMAR* '(# # # ...) ...)-13|
|
||||||
|
#26Y(00 00 00 00 00 00 00 00 20 01 DA 31 62 DB DC 31 5A DB DD DE 2D 03 05 C6
|
||||||
|
19 01)
|
||||||
|
((|COMMON-LISP|::|SPECIAL| |PAIP|::|*SIMPLE-GRAMMAR*|)
|
||||||
|
|PAIP|::|*SIMPLE-GRAMMAR*|
|
||||||
|
((|PAIP|::|SENTENCE| (|PAIP|::|NOUN-PHRASE| |PAIP|::|VERB-PHRASE|))
|
||||||
|
(|PAIP|::|NOUN-PHRASE| (|PAIP|::|ARTICLE| |PAIP|::|NOUN|))
|
||||||
|
(|PAIP|::|VERB-PHRASE| (|PAIP|::|VERB| |PAIP|::|NOUN-PHRASE|))
|
||||||
|
(|PAIP|::|ARTICLE| |COMMON-LISP|::|THE| |PAIP|::|A|)
|
||||||
|
(|PAIP|::|NOUN| |PAIP|::|MAN| |PAIP|::|BALL| |PAIP|::|WOMAN|
|
||||||
|
|PAIP|::|TABLE|)
|
||||||
|
(|PAIP|::|VERB| |PAIP|::|HIT| |PAIP|::|TOOK| |PAIP|::|SAW|
|
||||||
|
|PAIP|::|LIKED|))
|
||||||
|
|COMMON-LISP|::|VARIABLE| "A grammar for a trivial subset of English."
|
||||||
|
|SYSTEM|::|%SET-DOCUMENTATION|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|99 100 (DEFVAR *GRAMMAR* *SIMPLE-GRAMMAR* ...)-14|
|
||||||
|
#31Y(00 00 00 00 00 00 00 00 20 01 DA 31 62 DB 8C 57 05 DB 6B 02 31 5A DB DD
|
||||||
|
DE 2D 03 05 C6 19 01)
|
||||||
|
((|COMMON-LISP|::|SPECIAL| |PAIP|::|*GRAMMAR*|) |PAIP|::|*GRAMMAR*|
|
||||||
|
|PAIP|::|*SIMPLE-GRAMMAR*| |COMMON-LISP|::|VARIABLE|
|
||||||
|
"The grammar used by `generate'." |SYSTEM|::|%SET-DOCUMENTATION|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|102 104 (DEFUN RULE-LHS (RULE) ...)-15|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|RULE-LHS| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|RULE-LHS| #14Y(00 00 00 00 01 00 00 00 26 02 9E 5B 19 02) ()
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|NIL| |COMMON-LISP|::|NIL|)
|
||||||
|
(|PAIP|::|RULE|) "The left-hand side of a RULE." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|106 108 (DEFUN RULE-RHS (RULE) ...)-16|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|RULE-RHS| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|RULE-RHS| #14Y(00 00 00 00 01 00 00 00 26 02 9E 5C 19 02) ()
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|NIL| |COMMON-LISP|::|NIL|)
|
||||||
|
(|PAIP|::|RULE|) "The right-hand side of a RULE." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|110 112 (DEFUN REWRITES (CATEGORY) ...)-17|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|REWRITES| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|REWRITES|
|
||||||
|
#21Y(00 00 00 00 01 00 00 00 26 02 AD 6B 00 38 03 71 C8 2F 01 19 02)
|
||||||
|
(|PAIP|::|*GRAMMAR*| |PAIP|::|RULE-RHS|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|CATEGORY|)
|
||||||
|
"Return a list of the possible rewrites for CATEGORY." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|114 121 (DEFUN GENERATE (PHRASE) ...)-18|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|GENERATE| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|GENERATE|
|
||||||
|
#39Y(00 00 00 00 01 00 00 00 26 02 AD 6F 00 AE 8E 1D 08 92 00 0C AE 61
|
||||||
|
01 19 03 99 01 AF 30 02 19 03 14 6F 03 29 01 04 63)
|
||||||
|
(|PAIP|::|REWRITES| |PAIP|::|GENERATE| |PAIP|::|MAPPEND|
|
||||||
|
|PAIP|::|RANDOM-ELT|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|PHRASE|) "Generate a random LHS present in `*grammar*'." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|123 149 (DEFPARAMETER *BIGGER-GRAMMAR* '(# # # ...))-19|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 31 62 DB DC 31 5A C6 19 01)
|
||||||
|
((|COMMON-LISP|::|SPECIAL| |PAIP|::|*BIGGER-GRAMMAR*|)
|
||||||
|
|PAIP|::|*BIGGER-GRAMMAR*|
|
||||||
|
((|PAIP|::|SENTENCE| (|PAIP|::|NOUN-PHRASE| |PAIP|::|VERB-PHRASE|))
|
||||||
|
(|PAIP|::|NOUN-PHRASE|
|
||||||
|
(|PAIP|::|ARTICLE| |PAIP|::|ADJ*| |PAIP|::|NOUN| |PAIP|::|PP*|)
|
||||||
|
(|PAIP|::|NAME|) (|PAIP|::|PRONOUN|))
|
||||||
|
(|PAIP|::|VERB-PHRASE|
|
||||||
|
(|PAIP|::|VERB| |PAIP|::|NOUN-PHRASE| |PAIP|::|PP*|))
|
||||||
|
(|PAIP|::|PP*| |COMMON-LISP|::|NIL| (|PAIP|::|PP| |PAIP|::|PP*|))
|
||||||
|
(|PAIP|::|ADJ*| |COMMON-LISP|::|NIL| (|PAIP|::|ADJ| |PAIP|::|ADJ*|))
|
||||||
|
(|PAIP|::|PP| (|PAIP|::|PREP| |PAIP|::|NOUN-PHRASE|))
|
||||||
|
(|PAIP|::|PREP| |PAIP|::|TO| |PAIP|::|IN| |PAIP|::|BY| |PAIP|::|WITH|
|
||||||
|
|PAIP|::|ON|)
|
||||||
|
(|PAIP|::|ADJ| |PAIP|::|BIG| |PAIP|::|LITTLE| |PAIP|::|BLUE|
|
||||||
|
|PAIP|::|GREEN| |PAIP|::|ADIABATIC|)
|
||||||
|
(|PAIP|::|ARTICLE| |COMMON-LISP|::|THE| |PAIP|::|A|)
|
||||||
|
(|PAIP|::|NAME| |PAIP|::|PAT| |PAIP|::|KIM| |PAIP|::|LEE| |PAIP|::|TERRY|
|
||||||
|
|PAIP|::|ROBIN|)
|
||||||
|
(|PAIP|::|NOUN| |PAIP|::|MAN| |PAIP|::|BALL| |PAIP|::|WOMAN|
|
||||||
|
|PAIP|::|TABLE|)
|
||||||
|
(|PAIP|::|VERB| |PAIP|::|HIT| |PAIP|::|TOOK| |PAIP|::|SAW|
|
||||||
|
|PAIP|::|LIKED|)
|
||||||
|
(|PAIP|::|PRONOUN| |PAIP|::|HE| |PAIP|::|SHE| |PAIP|::|IT| |PAIP|::|THESE|
|
||||||
|
|PAIP|::|THOSE| |PAIP|::|THAT|)))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|151 151 (SETF *GRAMMAR* *BIGGER-GRAMMAR*)-20|
|
||||||
|
#16Y(00 00 00 00 00 00 00 00 20 01 0E 00 0F 01 19 01)
|
||||||
|
(|PAIP|::|*BIGGER-GRAMMAR*| |PAIP|::|*GRAMMAR*|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|153 158 (DEFUN GENERATE-TREE (PHRASE) ...)-21|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|GENERATE-TREE| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|GENERATE-TREE|
|
||||||
|
#42Y(00 00 00 00 01 00 00 00 26 02 AD 8E 1D 09 AD 88 01 0D AD 61 01 19
|
||||||
|
02 99 00 AE 33 00 16 19 02 AD AE 6F 01 6F 02 28 63 5D 19 02)
|
||||||
|
(|PAIP|::|GENERATE-TREE| |PAIP|::|REWRITES| |PAIP|::|RANDOM-ELT|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|PHRASE|)
|
||||||
|
"Generate a random PHRASE, with a complete parse tree." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|160 168 (DEFUN GENERATE-ALL (PHRASE) ...)-22|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|GENERATE-ALL| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|GENERATE-ALL|
|
||||||
|
#56Y(00 00 00 00 01 00 00 00 26 02 92 01 1B 00 1B 23 94 01 6C 11 95 02
|
||||||
|
6C 0D 30 00 19 02 99 02 AE 6F 01 30 03 19 02 93 01 65 AD 8E 1D 64
|
||||||
|
AD 88 01 6C AD 61 01 14 61 01 19 02)
|
||||||
|
(|PAIP|::|COMBINE-ALL| |PAIP|::|REWRITES| |PAIP|::|GENERATE-ALL|
|
||||||
|
|PAIP|::|MAPPEND|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|PHRASE|)
|
||||||
|
"Generate a list of all possible expansions of PHRASE." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|170 175 (DEFUN COMBINE-ALL (XLIST YLIST) ...)-23|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|COMBINE-ALL| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|COMBINE-ALL|
|
||||||
|
#18Y(00 00 00 00 02 00 00 00 26 03 DA AF AF 2D 03 01 19 03)
|
||||||
|
(#.#'|COMMON-LISP|::|APPEND| |PAIP|::|CROSS-PRODUCT|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|XLIST| |PAIP|::|YLIST|)
|
||||||
|
"Return a list of lists formed by appending a YLIST to an XLIST.\n\n
|
||||||
|
E.g., (combine-all '((a) (b)) '((1) (2)))\n
|
||||||
|
=> ((A 1) (B 1) (A 2) (B 2))."
|
||||||
|
1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|177 189 (DEFUN CROSS-PRODUCT (FN AS BS) ...)-24|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|CROSS-PRODUCT| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|CROSS-PRODUCT|
|
||||||
|
#30Y(00 00 00 00 03 00 00 00 26 04 00 2B 02 7F 04 00 00 7F 03 00 01 AC
|
||||||
|
6D 00 01 AF 30 01 19 05)
|
||||||
|
(#Y(|PAIP|::|CROSS-PRODUCT-1|
|
||||||
|
#42Y(00 00 00 00 01 00 00 00 26 02 63 69 00 02 1B 0F 94 00 69 00 01
|
||||||
|
AD B2 76 02 84 02 16 01 83 00 AC 8D 9F 6D 16 01 AC 31 B1 19 03)
|
||||||
|
(|COMMON-LISP|::|NIL|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|B|) |COMMON-LISP|::|NIL| 1)
|
||||||
|
|PAIP|::|MAPPEND|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|FN| |PAIP|::|AS| |PAIP|::|BS|)
|
||||||
|
"Calculate the result of passing FN to the cross (or Cartesian) product of\n
|
||||||
|
lists of AS and BS."
|
||||||
|
1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
|
@ -0,0 +1,47 @@
|
||||||
|
#0Y_ #0Y |CHARSET|::|UTF-8|
|
||||||
|
(|COMMON-LISP|::|SETQ| |COMMON-LISP|::|*PACKAGE*|
|
||||||
|
(|SYSTEM|::|%FIND-PACKAGE| "PAIP"))
|
||||||
|
(|SYSTEM|::|C-PROCLAIM| '(|COMMON-LISP|::|SPECIAL| |PAIP|::|*TITLES*|))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|FIRST-NAME|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|NAME|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LAST-NAME|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|NAME|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|POWER|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|N| |PAIP|::|M|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|COUNT-ATOMS|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|EXPR|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|COUNT-ALL-ATOMS|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE|
|
||||||
|
'(|PAIP|::|EXPR| |COMMON-LISP|::|&OPTIONAL| (|PAIP|::|IF-NULL| 1.))))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|COUNT-ANYWHERE|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE|
|
||||||
|
'(|PAIP|::|OBJ| |PAIP|::|EXPR| |COMMON-LISP|::|&OPTIONAL|
|
||||||
|
(|PAIP|::|TEST| #'|COMMON-LISP|::|EQ|))))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|DOT-PRODUCT|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|LIST1| |PAIP|::|LIST2|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|MAPPEND|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|FN| |COMMON-LISP|::|LIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|ONE-OF|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|COMMON-LISP|::|SET|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|RANDOM-ELT|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|CHOICES|)))
|
||||||
|
(|SYSTEM|::|C-PROCLAIM| '(|COMMON-LISP|::|SPECIAL| |PAIP|::|*SIMPLE-GRAMMAR*|))
|
||||||
|
(|SYSTEM|::|C-PROCLAIM| '(|COMMON-LISP|::|SPECIAL| |PAIP|::|*GRAMMAR*|))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|RULE-LHS|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|RULE|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|RULE-RHS|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|RULE|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|REWRITES|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|CATEGORY|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|GENERATE|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|PHRASE|)))
|
||||||
|
(|SYSTEM|::|C-PROCLAIM| '(|COMMON-LISP|::|SPECIAL| |PAIP|::|*BIGGER-GRAMMAR*|))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|GENERATE-TREE|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|PHRASE|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|GENERATE-ALL|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|PHRASE|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|COMBINE-ALL|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|XLIST| |PAIP|::|YLIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|CROSS-PRODUCT|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE|
|
||||||
|
'(|PAIP|::|FN| |PAIP|::|AS| |PAIP|::|BS|)))
|
21
paip.lisp
21
paip.lisp
|
@ -172,6 +172,21 @@
|
||||||
|
|
||||||
E.g., (combine-all '((a) (b)) '((1) (2)))
|
E.g., (combine-all '((a) (b)) '((1) (2)))
|
||||||
=> ((A 1) (B 1) (A 2) (B 2))."
|
=> ((A 1) (B 1) (A 2) (B 2))."
|
||||||
(mappend #'(lambda (y)
|
(cross-product #'append xlist ylist))
|
||||||
(mapcar #'(lambda (x) (append x y)) xlist))
|
|
||||||
ylist))
|
;; Exercise 2.4 [m] One way of describing combine-all is that it calculates the
|
||||||
|
;; cross-product of the function append on the argument lists. Write the
|
||||||
|
;; higher-order function cross-product, and define combine-all in terms of it.
|
||||||
|
;; The moral is to make your code as general as possible, because you never
|
||||||
|
;; know what you may want to do with it next.
|
||||||
|
;; NOTE[acd]: it's the CARTESIAN product.
|
||||||
|
|
||||||
|
(defun cross-product (fn as bs)
|
||||||
|
"Calculate the result of passing FN to the cross (or Cartesian) product of
|
||||||
|
lists of AS and BS."
|
||||||
|
(mappend #'(lambda (b)
|
||||||
|
(mapcar #'(lambda (a) (funcall fn a b)) as))
|
||||||
|
bs))
|
||||||
|
|
||||||
|
|
||||||
|
;;; Chapter 3
|
||||||
|
|
|
@ -0,0 +1,384 @@
|
||||||
|
(|SYSTEM|::|VERSION| '(20080430.))
|
||||||
|
#0Y_ #0Y |CHARSET|::|UTF-8|
|
||||||
|
#Y(#:|1 3 (IN-PACKAGE #:PAIP)-1|
|
||||||
|
#17Y(00 00 00 00 00 00 00 00 20 01 DA 31 F6 0F 01 19 01)
|
||||||
|
("PAIP" |COMMON-LISP|::|*PACKAGE*|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|6 11 (DEFPARAMETER *TITLES* '(MD SR. JR. ...) ...)-2|
|
||||||
|
#26Y(00 00 00 00 00 00 00 00 20 01 DA 31 62 DB DC 31 5A DB DD DE 2D 03 05 C6
|
||||||
|
19 01)
|
||||||
|
((|COMMON-LISP|::|SPECIAL| |PAIP|::|*TITLES*|) |PAIP|::|*TITLES*|
|
||||||
|
(|PAIP|::|MD| |PAIP|::|SR.| |PAIP|::|JR.| |PAIP|::|SIR|)
|
||||||
|
|COMMON-LISP|::|VARIABLE| "Titles aren't part of names."
|
||||||
|
|SYSTEM|::|%SET-DOCUMENTATION|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|13 17 (DEFUN FIRST-NAME (NAME) ...)-3|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|FIRST-NAME| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|FIRST-NAME|
|
||||||
|
#29Y(00 00 00 00 01 00 00 00 26 02 94 01 6B 00 38 03 8C C1 04 9E 5B 19
|
||||||
|
02 95 01 29 01 03 6D)
|
||||||
|
(|PAIP|::|*TITLES*|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|NAME|)
|
||||||
|
"Select the first name from a NAME represented as a list." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|19 21 (DEFUN LAST-NAME (NAME) ...)-4|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LAST-NAME| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LAST-NAME|
|
||||||
|
#17Y(00 00 00 00 01 00 00 00 26 02 AD 72 63 2F 00 19 02)
|
||||||
|
(|PAIP|::|FIRST-NAME|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|NAME|)
|
||||||
|
"Select the last name from a NAME represented as a list." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|23 31 (DEFUN POWER (N M) ...)-5|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|POWER| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|POWER|
|
||||||
|
#37Y(00 00 00 00 02 00 00 00 26 03 AD 8E AC 11 AD DA 90 01 2F 0E AE AF
|
||||||
|
97 03 6C 70 33 02 39 19 03 C5 19 03 9F 19 03)
|
||||||
|
(1.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|N| |PAIP|::|M|) "Raise N to an integer power M." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|33 44 (DEFUN COUNT-ATOMS (EXPR) ...)-6|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|COUNT-ATOMS| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|COUNT-ATOMS|
|
||||||
|
#38Y(00 00 00 00 01 00 00 00 26 02 92 01 09 C5 19 02 C6 19 02 93 01 77
|
||||||
|
9E 20 77 94 01 6C 76 95 02 6C 72 33 02 37 19 02)
|
||||||
|
(0. 1.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|EXPR|) "Count how many atoms are in EXPR, disregarding NIL."
|
||||||
|
1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|46 52 (DEFUN COUNT-ALL-ATOMS (EXPR &OPTIONAL #) ...)-7|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|COUNT-ALL-ATOMS| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|COUNT-ALL-ATOMS|
|
||||||
|
#45Y(00 00 00 00 01 00 01 00 26 08 3B 01 0B C5 F9 92 02 09 9E 19 03 C5
|
||||||
|
19 03 93 02 77 9F 20 77 94 02 DA 6C 67 95 03 DB 6C 62 33 02 37 19
|
||||||
|
03)
|
||||||
|
(1. 0.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|EXPR| |COMMON-LISP|::|&OPTIONAL| (|PAIP|::|IF-NULL| 1.))
|
||||||
|
"Count all atoms in EXPR, including NILs only in non-tail position." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|54 64 (DEFUN COUNT-ANYWHERE (OBJ EXPR &OPTIONAL ...) ...)-8|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|COUNT-ANYWHERE| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|COUNT-ANYWHERE|
|
||||||
|
#57Y(00 00 00 00 02 00 01 00 26 09 3B 01 15 C5 F9 92 02 13 C6 19 04 C7
|
||||||
|
19 04 AD B0 B0 36 02 1C 76 C6 19 04 93 02 6D 9F 20 70 AF 94 03 AF
|
||||||
|
6C 5C B0 95 04 B0 6C 56 33 02 37 19 04)
|
||||||
|
(#.#'|COMMON-LISP|::|EQ| 0. 1.)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|OBJ| |PAIP|::|EXPR| |COMMON-LISP|::|&OPTIONAL|
|
||||||
|
(|PAIP|::|TEST| #'|COMMON-LISP|::|EQ|))
|
||||||
|
"Count how many times an OBJ appears anywhere in an EXPR." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|66 73 (DEFUN DOT-PRODUCT (LIST1 LIST2) ...)-9|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|DOT-PRODUCT| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|DOT-PRODUCT|
|
||||||
|
#20Y(00 00 00 00 02 00 00 00 26 03 DA DB B0 B0 33 01 16 9B 00 03)
|
||||||
|
(#.#'|COMMON-LISP|::|+| #.#'|COMMON-LISP|::|*|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|LIST1| |PAIP|::|LIST2|)
|
||||||
|
"Compute the dot product of LIST1 and LIST2" 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|76 80 (DEFUN MAPPEND (FN LIST) ...)-10|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|MAPPEND| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|MAPPEND|
|
||||||
|
#19Y(00 00 00 00 02 00 00 00 26 03 DA AF AF 33 00 16 9B 00 03)
|
||||||
|
(#.#'|COMMON-LISP|::|APPEND|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|FN| |COMMON-LISP|::|LIST|)
|
||||||
|
"Apply FN to each element of LIST and append the results." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|82 84 (DEFUN ONE-OF (SET) ...)-11|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|ONE-OF| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|ONE-OF|
|
||||||
|
#17Y(00 00 00 00 01 00 00 00 26 02 AD 6F 00 61 01 19 02)
|
||||||
|
(|PAIP|::|RANDOM-ELT|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|COMMON-LISP|::|SET|) "Pick one element of SET, and make a list of it."
|
||||||
|
1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|86 88 (DEFUN RANDOM-ELT (CHOICES) ...)-12|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|RANDOM-ELT| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|RANDOM-ELT|
|
||||||
|
#22Y(00 00 00 00 01 00 00 00 26 02 AD AE 72 62 38 01 72 F7 32 5E 19 02)
|
||||||
|
() (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|CHOICES|) "Choose a random element from list CHOICES." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|90 97 (DEFPARAMETER *SIMPLE-GRAMMAR* '(# # # ...) ...)-13|
|
||||||
|
#26Y(00 00 00 00 00 00 00 00 20 01 DA 31 62 DB DC 31 5A DB DD DE 2D 03 05 C6
|
||||||
|
19 01)
|
||||||
|
((|COMMON-LISP|::|SPECIAL| |PAIP|::|*SIMPLE-GRAMMAR*|)
|
||||||
|
|PAIP|::|*SIMPLE-GRAMMAR*|
|
||||||
|
((|PAIP|::|SENTENCE| (|PAIP|::|NOUN-PHRASE| |PAIP|::|VERB-PHRASE|))
|
||||||
|
(|PAIP|::|NOUN-PHRASE| (|PAIP|::|ARTICLE| |PAIP|::|NOUN|))
|
||||||
|
(|PAIP|::|VERB-PHRASE| (|PAIP|::|VERB| |PAIP|::|NOUN-PHRASE|))
|
||||||
|
(|PAIP|::|ARTICLE| |COMMON-LISP|::|THE| |PAIP|::|A|)
|
||||||
|
(|PAIP|::|NOUN| |PAIP|::|MAN| |PAIP|::|BALL| |PAIP|::|WOMAN|
|
||||||
|
|PAIP|::|TABLE|)
|
||||||
|
(|PAIP|::|VERB| |PAIP|::|HIT| |PAIP|::|TOOK| |PAIP|::|SAW|
|
||||||
|
|PAIP|::|LIKED|))
|
||||||
|
|COMMON-LISP|::|VARIABLE| "A grammar for a trivial subset of English."
|
||||||
|
|SYSTEM|::|%SET-DOCUMENTATION|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|99 100 (DEFVAR *GRAMMAR* *SIMPLE-GRAMMAR* ...)-14|
|
||||||
|
#31Y(00 00 00 00 00 00 00 00 20 01 DA 31 62 DB 8C 57 05 DB 6B 02 31 5A DB DD
|
||||||
|
DE 2D 03 05 C6 19 01)
|
||||||
|
((|COMMON-LISP|::|SPECIAL| |PAIP|::|*GRAMMAR*|) |PAIP|::|*GRAMMAR*|
|
||||||
|
|PAIP|::|*SIMPLE-GRAMMAR*| |COMMON-LISP|::|VARIABLE|
|
||||||
|
"The grammar used by `generate'." |SYSTEM|::|%SET-DOCUMENTATION|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|102 104 (DEFUN RULE-LHS (RULE) ...)-15|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|RULE-LHS| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|RULE-LHS| #14Y(00 00 00 00 01 00 00 00 26 02 9E 5B 19 02) ()
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|NIL| |COMMON-LISP|::|NIL|)
|
||||||
|
(|PAIP|::|RULE|) "The left-hand side of a RULE." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|106 108 (DEFUN RULE-RHS (RULE) ...)-16|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|RULE-RHS| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|RULE-RHS| #14Y(00 00 00 00 01 00 00 00 26 02 9E 5C 19 02) ()
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|NIL| |COMMON-LISP|::|NIL|)
|
||||||
|
(|PAIP|::|RULE|) "The right-hand side of a RULE." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|110 112 (DEFUN REWRITES (CATEGORY) ...)-17|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|REWRITES| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|REWRITES|
|
||||||
|
#21Y(00 00 00 00 01 00 00 00 26 02 AD 6B 00 38 03 71 C8 2F 01 19 02)
|
||||||
|
(|PAIP|::|*GRAMMAR*| |PAIP|::|RULE-RHS|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|CATEGORY|)
|
||||||
|
"Return a list of the possible rewrites for CATEGORY." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|114 121 (DEFUN GENERATE (PHRASE) ...)-18|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|GENERATE| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|GENERATE|
|
||||||
|
#39Y(00 00 00 00 01 00 00 00 26 02 AD 6F 00 AE 8E 1D 08 92 00 0C AE 61
|
||||||
|
01 19 03 99 01 AF 30 02 19 03 14 6F 03 29 01 04 63)
|
||||||
|
(|PAIP|::|REWRITES| |PAIP|::|GENERATE| |PAIP|::|MAPPEND|
|
||||||
|
|PAIP|::|RANDOM-ELT|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|PHRASE|) "Generate a random LHS present in `*grammar*'." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|123 149 (DEFPARAMETER *BIGGER-GRAMMAR* '(# # # ...))-19|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 31 62 DB DC 31 5A C6 19 01)
|
||||||
|
((|COMMON-LISP|::|SPECIAL| |PAIP|::|*BIGGER-GRAMMAR*|)
|
||||||
|
|PAIP|::|*BIGGER-GRAMMAR*|
|
||||||
|
((|PAIP|::|SENTENCE| (|PAIP|::|NOUN-PHRASE| |PAIP|::|VERB-PHRASE|))
|
||||||
|
(|PAIP|::|NOUN-PHRASE|
|
||||||
|
(|PAIP|::|ARTICLE| |PAIP|::|ADJ*| |PAIP|::|NOUN| |PAIP|::|PP*|)
|
||||||
|
(|PAIP|::|NAME|) (|PAIP|::|PRONOUN|))
|
||||||
|
(|PAIP|::|VERB-PHRASE|
|
||||||
|
(|PAIP|::|VERB| |PAIP|::|NOUN-PHRASE| |PAIP|::|PP*|))
|
||||||
|
(|PAIP|::|PP*| |COMMON-LISP|::|NIL| (|PAIP|::|PP| |PAIP|::|PP*|))
|
||||||
|
(|PAIP|::|ADJ*| |COMMON-LISP|::|NIL| (|PAIP|::|ADJ| |PAIP|::|ADJ*|))
|
||||||
|
(|PAIP|::|PP| (|PAIP|::|PREP| |PAIP|::|NOUN-PHRASE|))
|
||||||
|
(|PAIP|::|PREP| |PAIP|::|TO| |PAIP|::|IN| |PAIP|::|BY| |PAIP|::|WITH|
|
||||||
|
|PAIP|::|ON|)
|
||||||
|
(|PAIP|::|ADJ| |PAIP|::|BIG| |PAIP|::|LITTLE| |PAIP|::|BLUE|
|
||||||
|
|PAIP|::|GREEN| |PAIP|::|ADIABATIC|)
|
||||||
|
(|PAIP|::|ARTICLE| |COMMON-LISP|::|THE| |PAIP|::|A|)
|
||||||
|
(|PAIP|::|NAME| |PAIP|::|PAT| |PAIP|::|KIM| |PAIP|::|LEE| |PAIP|::|TERRY|
|
||||||
|
|PAIP|::|ROBIN|)
|
||||||
|
(|PAIP|::|NOUN| |PAIP|::|MAN| |PAIP|::|BALL| |PAIP|::|WOMAN|
|
||||||
|
|PAIP|::|TABLE|)
|
||||||
|
(|PAIP|::|VERB| |PAIP|::|HIT| |PAIP|::|TOOK| |PAIP|::|SAW|
|
||||||
|
|PAIP|::|LIKED|)
|
||||||
|
(|PAIP|::|PRONOUN| |PAIP|::|HE| |PAIP|::|SHE| |PAIP|::|IT| |PAIP|::|THESE|
|
||||||
|
|PAIP|::|THOSE| |PAIP|::|THAT|)))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|151 151 (SETF *GRAMMAR* *BIGGER-GRAMMAR*)-20|
|
||||||
|
#16Y(00 00 00 00 00 00 00 00 20 01 0E 00 0F 01 19 01)
|
||||||
|
(|PAIP|::|*BIGGER-GRAMMAR*| |PAIP|::|*GRAMMAR*|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|153 158 (DEFUN GENERATE-TREE (PHRASE) ...)-21|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|GENERATE-TREE| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|GENERATE-TREE|
|
||||||
|
#42Y(00 00 00 00 01 00 00 00 26 02 AD 8E 1D 09 AD 88 01 0D AD 61 01 19
|
||||||
|
02 99 00 AE 33 00 16 19 02 AD AE 6F 01 6F 02 28 63 5D 19 02)
|
||||||
|
(|PAIP|::|GENERATE-TREE| |PAIP|::|REWRITES| |PAIP|::|RANDOM-ELT|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|PHRASE|)
|
||||||
|
"Generate a random PHRASE, with a complete parse tree." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|160 168 (DEFUN GENERATE-ALL (PHRASE) ...)-22|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|GENERATE-ALL| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|GENERATE-ALL|
|
||||||
|
#56Y(00 00 00 00 01 00 00 00 26 02 92 01 1B 00 1B 23 94 01 6C 11 95 02
|
||||||
|
6C 0D 30 00 19 02 99 02 AE 6F 01 30 03 19 02 93 01 65 AD 8E 1D 64
|
||||||
|
AD 88 01 6C AD 61 01 14 61 01 19 02)
|
||||||
|
(|PAIP|::|COMBINE-ALL| |PAIP|::|REWRITES| |PAIP|::|GENERATE-ALL|
|
||||||
|
|PAIP|::|MAPPEND|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|PHRASE|)
|
||||||
|
"Generate a list of all possible expansions of PHRASE." 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|170 175 (DEFUN COMBINE-ALL (XLIST YLIST) ...)-23|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|COMBINE-ALL| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|COMBINE-ALL|
|
||||||
|
#18Y(00 00 00 00 02 00 00 00 26 03 DA AF AF 2D 03 01 19 03)
|
||||||
|
(#.#'|COMMON-LISP|::|APPEND| |PAIP|::|CROSS-PRODUCT|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|XLIST| |PAIP|::|YLIST|)
|
||||||
|
"Return a list of lists formed by appending a YLIST to an XLIST.\n\n
|
||||||
|
E.g., (combine-all '((a) (b)) '((1) (2)))\n
|
||||||
|
=> ((A 1) (B 1) (A 2) (B 2))."
|
||||||
|
1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|177 189 (DEFUN CROSS-PRODUCT (FN AS BS) ...)-24|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|CROSS-PRODUCT| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|CROSS-PRODUCT|
|
||||||
|
#30Y(00 00 00 00 03 00 00 00 26 04 00 2B 02 7F 04 00 00 7F 03 00 01 AC
|
||||||
|
6D 00 01 AF 30 01 19 05)
|
||||||
|
(#Y(|PAIP|::|CROSS-PRODUCT-1|
|
||||||
|
#42Y(00 00 00 00 01 00 00 00 26 02 63 69 00 02 1B 0F 94 00 69 00 01
|
||||||
|
AD B2 76 02 84 02 16 01 83 00 AC 8D 9F 6D 16 01 AC 31 B1 19 03)
|
||||||
|
(|COMMON-LISP|::|NIL|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|B|) |COMMON-LISP|::|NIL| 1)
|
||||||
|
|PAIP|::|MAPPEND|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|FN| |PAIP|::|AS| |PAIP|::|BS|)
|
||||||
|
"Calculate the result of passing FN to the cross (or Cartesian) product of\n
|
||||||
|
lists of AS and BS."
|
||||||
|
1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|192 209 (DEFUN TEST-LET*-LAMBDA NIL ...)-25|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|TEST-LET*-LAMBDA| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|TEST-LET*-LAMBDA|
|
||||||
|
#34Y(00 00 00 00 00 00 00 00 26 01 DA DA 73 02 39 DA AD 82 02 37 00 DA
|
||||||
|
DA DA 73 02 39 73 02 37 61 02 19 01)
|
||||||
|
(6.) (|COMMON-LISP|::|NIL| |COMMON-LISP|::|NIL| |COMMON-LISP|::|NIL|) ()
|
||||||
|
|COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|211 217 (DEFUN LENGTH1 (LIST) ...)-26|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LENGTH1| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LENGTH1|
|
||||||
|
#27Y(00 00 00 00 01 00 00 00 26 02 DA AE 1B 04 85 01 83 00 AC 8D 9F 78
|
||||||
|
16 01 15 19 02)
|
||||||
|
(0.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|COMMON-LISP|::|LIST|) |COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|219 222 (DEFUN LENGTH1.1 (LIST) ...)-27|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LENGTH1.1| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LENGTH1.1|
|
||||||
|
#25Y(00 00 00 00 01 00 00 00 26 02 DA AE 1B 04 85 01 83 00 AC 8D 9F 78
|
||||||
|
9E 19 04)
|
||||||
|
(0.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|COMMON-LISP|::|LIST|) |COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|224 230 (DEFUN LENGTH2 (LIST) ...)-28|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LENGTH2| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LENGTH2|
|
||||||
|
#31Y(00 00 00 00 01 00 00 00 26 02 DA AE 1B 08 94 00 85 02 16 01 83 00
|
||||||
|
AC 8D 9F 74 16 01 15 19 02)
|
||||||
|
(0.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|COMMON-LISP|::|LIST|) |COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|232 235 (DEFUN LENGTH3 (LIST) ...)-29|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LENGTH3| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LENGTH3|
|
||||||
|
#25Y(00 00 00 00 01 00 00 00 26 02 DA AE 93 00 07 83 00 85 01 92 00 79
|
||||||
|
9E 19 04)
|
||||||
|
(0.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|COMMON-LISP|::|LIST|) |COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|237 239 (DEFUN LENGTH4 (LIST) ...)-30|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LENGTH4| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LENGTH4|
|
||||||
|
#25Y(00 00 00 00 01 00 00 00 26 02 AD DA 1B 04 85 00 83 01 AD 8D 9F 78
|
||||||
|
15 19 03)
|
||||||
|
(0.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|COMMON-LISP|::|LIST|) |COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|241 243 (DEFUN LENGTH4.1 (LIST) ...)-31|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LENGTH4.1| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LENGTH4.1|
|
||||||
|
#25Y(00 00 00 00 01 00 00 00 26 02 AD DA 1B 04 85 00 83 01 AD 8D 9F 78
|
||||||
|
15 19 03)
|
||||||
|
(0.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|COMMON-LISP|::|LIST|) |COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|245 250 (DEFUN LENGTH4.2 (LIST) ...)-32|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LENGTH4.2| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LENGTH4.2|
|
||||||
|
#36Y(00 00 00 00 01 00 00 00 26 02 63 94 02 83 03 16 01 C5 F8 93 02 0B
|
||||||
|
85 00 94 02 83 03 16 01 92 02 75 15 19 02)
|
||||||
|
(0.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|COMMON-LISP|::|LIST|) |COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|252 253 (DEFUN LENGTH5 (LIST) ...)-33|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LENGTH5| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LENGTH5|
|
||||||
|
#19Y(00 00 00 00 01 00 00 00 26 02 99 00 AE 38 04 32 7E 19 02)
|
||||||
|
(|PAIP|::|TRUE|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|COMMON-LISP|::|LIST|) |COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|255 257 (DEFUN TRUE (X) ...)-34|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|TRUE| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|TRUE| #13Y(00 00 00 00 01 00 00 00 26 02 02 19 02) ()
|
||||||
|
|COMMON-LISP|::|NIL| (|PAIP|::|X|) |COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|259 263 (DEFUN LENGTH6 (LIST) ...)-35|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LENGTH6| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LENGTH6|
|
||||||
|
#28Y(00 00 00 00 01 00 00 00 26 02 93 01 0C 99 01 AE 64 38 03 72 7B 32
|
||||||
|
B1 19 02 C5 19 02)
|
||||||
|
(0. |PAIP|::|TRUE|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|COMMON-LISP|::|LIST|) |COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|265 268 (DEFUN LENGTH7 (LIST) ...)-36|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LENGTH7| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LENGTH7|
|
||||||
|
#27Y(00 00 00 00 01 00 00 00 26 02 92 01 06 C5 19 02 93 01 7A 95 01 6C
|
||||||
|
79 32 B1 19 02)
|
||||||
|
(0.) (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|COMMON-LISP|::|LIST|) |COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|270 271 (DEFUN LENGTH8 (LIST) ...)-37|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LENGTH8| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LENGTH8| #16Y(00 00 00 00 01 00 00 00 26 02 AD DA 30 01 19 02)
|
||||||
|
(0. |PAIP|::|LENGTH8-AUX|)
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|COMMON-LISP|::|LIST|) |COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
||||||
|
#Y(#:|273 276 (DEFUN LENGTH8-AUX (SUBLIST LEN-SO-FAR) ...)-38|
|
||||||
|
#20Y(00 00 00 00 00 00 00 00 20 01 DA 2F 01 DA DC 32 9C C5 19 01)
|
||||||
|
(|PAIP|::|LENGTH8-AUX| |SYSTEM|::|REMOVE-OLD-DEFINITIONS|
|
||||||
|
#Y(|PAIP|::|LENGTH8-AUX|
|
||||||
|
#27Y(00 00 00 00 02 00 00 00 26 03 92 02 06 9E 19 03 93 02 7A 95 02 96
|
||||||
|
02 29 02 05 75)
|
||||||
|
() (|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|)
|
||||||
|
(|PAIP|::|SUBLIST| |PAIP|::|LEN-SO-FAR|) |COMMON-LISP|::|NIL| 1))
|
||||||
|
(|COMMON-LISP|::|T| |COMMON-LISP|::|T| |COMMON-LISP|::|T|))
|
|
@ -0,0 +1,76 @@
|
||||||
|
#0Y_ #0Y |CHARSET|::|UTF-8|
|
||||||
|
(|COMMON-LISP|::|SETQ| |COMMON-LISP|::|*PACKAGE*|
|
||||||
|
(|SYSTEM|::|%FIND-PACKAGE| "PAIP"))
|
||||||
|
(|SYSTEM|::|C-PROCLAIM| '(|COMMON-LISP|::|SPECIAL| |PAIP|::|*TITLES*|))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|FIRST-NAME|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|NAME|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LAST-NAME|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|NAME|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|POWER|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|N| |PAIP|::|M|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|COUNT-ATOMS|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|EXPR|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|COUNT-ALL-ATOMS|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE|
|
||||||
|
'(|PAIP|::|EXPR| |COMMON-LISP|::|&OPTIONAL| (|PAIP|::|IF-NULL| 1.))))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|COUNT-ANYWHERE|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE|
|
||||||
|
'(|PAIP|::|OBJ| |PAIP|::|EXPR| |COMMON-LISP|::|&OPTIONAL|
|
||||||
|
(|PAIP|::|TEST| #'|COMMON-LISP|::|EQ|))))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|DOT-PRODUCT|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|LIST1| |PAIP|::|LIST2|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|MAPPEND|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|FN| |COMMON-LISP|::|LIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|ONE-OF|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|COMMON-LISP|::|SET|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|RANDOM-ELT|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|CHOICES|)))
|
||||||
|
(|SYSTEM|::|C-PROCLAIM| '(|COMMON-LISP|::|SPECIAL| |PAIP|::|*SIMPLE-GRAMMAR*|))
|
||||||
|
(|SYSTEM|::|C-PROCLAIM| '(|COMMON-LISP|::|SPECIAL| |PAIP|::|*GRAMMAR*|))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|RULE-LHS|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|RULE|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|RULE-RHS|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|RULE|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|REWRITES|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|CATEGORY|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|GENERATE|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|PHRASE|)))
|
||||||
|
(|SYSTEM|::|C-PROCLAIM| '(|COMMON-LISP|::|SPECIAL| |PAIP|::|*BIGGER-GRAMMAR*|))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|GENERATE-TREE|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|PHRASE|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|GENERATE-ALL|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|PHRASE|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|COMBINE-ALL|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|XLIST| |PAIP|::|YLIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|CROSS-PRODUCT|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE|
|
||||||
|
'(|PAIP|::|FN| |PAIP|::|AS| |PAIP|::|BS|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|TEST-LET*-LAMBDA|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '|COMMON-LISP|::|NIL|))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LENGTH1|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|COMMON-LISP|::|LIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LENGTH1.1|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|COMMON-LISP|::|LIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LENGTH2|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|COMMON-LISP|::|LIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LENGTH3|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|COMMON-LISP|::|LIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LENGTH4|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|COMMON-LISP|::|LIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LENGTH4.1|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|COMMON-LISP|::|LIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LENGTH4.2|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|COMMON-LISP|::|LIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LENGTH5|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|COMMON-LISP|::|LIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|TRUE|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|PAIP|::|X|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LENGTH6|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|COMMON-LISP|::|LIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LENGTH7|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|COMMON-LISP|::|LIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LENGTH8|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE| '(|COMMON-LISP|::|LIST|)))
|
||||||
|
(|SYSTEM|::|C-DEFUN| '|PAIP|::|LENGTH8-AUX|
|
||||||
|
(|SYSTEM|::|LAMBDA-LIST-TO-SIGNATURE|
|
||||||
|
'(|PAIP|::|SUBLIST| |PAIP|::|LEN-SO-FAR|)))
|
|
@ -0,0 +1,302 @@
|
||||||
|
;;;; paip.lisp
|
||||||
|
|
||||||
|
(in-package #:paip)
|
||||||
|
|
||||||
|
|
||||||
|
;;; Chapter 1
|
||||||
|
|
||||||
|
;; 1.1 define a version of `last-name' that handles "Rex Morgan MD," "Morton
|
||||||
|
;; Downey, Jr.," etc.
|
||||||
|
(defparameter *titles* '(MD Sr. Jr. Sir)
|
||||||
|
"Titles aren't part of names.")
|
||||||
|
|
||||||
|
(defun first-name (name)
|
||||||
|
"Select the first name from a NAME represented as a list."
|
||||||
|
(if (member (first name) *titles*)
|
||||||
|
(first-name (rest name))
|
||||||
|
(first name)))
|
||||||
|
|
||||||
|
(defun last-name (name)
|
||||||
|
"Select the last name from a NAME represented as a list."
|
||||||
|
(first-name (reverse name)))
|
||||||
|
|
||||||
|
;; 1.2 Write a function to exponentiate, or raise a number to an integer
|
||||||
|
;; power. For example: (power 3 2) = 3 ^ 2 = 9.
|
||||||
|
|
||||||
|
(defun power (n m)
|
||||||
|
"Raise N to an integer power M."
|
||||||
|
(cond
|
||||||
|
((= m 0) 1)
|
||||||
|
((= m 1) n)
|
||||||
|
(t (* n (power n (- m 1))))))
|
||||||
|
|
||||||
|
;; 1.3 Write a function that counts the number of atoms in an expression. For
|
||||||
|
;; example: (count-atoms '(a (b) c)) = 3. Notice that there is something of an
|
||||||
|
;; ambiguity in this: shoul (a nil c) count as 3 atoms, or as two, because it's
|
||||||
|
;; the equivalent to (a () c) ?
|
||||||
|
|
||||||
|
(defun count-atoms (expr)
|
||||||
|
"Count how many atoms are in EXPR, disregarding NIL."
|
||||||
|
(cond
|
||||||
|
((null expr) 0)
|
||||||
|
((atom expr) 1)
|
||||||
|
(t (+ (count-atoms (first expr))
|
||||||
|
(count-atoms (rest expr))))))
|
||||||
|
|
||||||
|
(defun count-all-atoms (expr &optional (if-null 1))
|
||||||
|
"Count all atoms in EXPR, including NILs only in non-tail position."
|
||||||
|
(cond
|
||||||
|
((null expr) if-null)
|
||||||
|
((atom expr) 1)
|
||||||
|
(t (+ (count-all-atoms (first expr) 1)
|
||||||
|
(count-all-atoms (rest expr) 0)))))
|
||||||
|
|
||||||
|
;; 1.4 Write a function that counts the number of times an expression occurs
|
||||||
|
;; anywhere in another expression. Example: (count-anywhere 'a '(a ((a) b) a))
|
||||||
|
;; => 3.
|
||||||
|
|
||||||
|
(defun count-anywhere (obj expr &optional (test #'eq))
|
||||||
|
"Count how many times an OBJ appears anywhere in an EXPR."
|
||||||
|
(cond
|
||||||
|
((null expr) 0)
|
||||||
|
((atom expr) (if (funcall test obj expr) 1 0))
|
||||||
|
(t (+ (count-anywhere obj (first expr) test)
|
||||||
|
(count-anywhere obj (rest expr) test)))))
|
||||||
|
|
||||||
|
;; Exercise 1.5 [m] Write a function to compute the dot product of two
|
||||||
|
;; sequences of numbers, represented as lists. The dot product is computed by
|
||||||
|
;; multiplying corresponding elements and then adding up the resulting
|
||||||
|
;; products. Example: (dot-product '(10 20) '(3 4)) = 10 × 3 + 20 × 4 = 110
|
||||||
|
|
||||||
|
(defun dot-product (list1 list2)
|
||||||
|
"Compute the dot product of LIST1 and LIST2"
|
||||||
|
(apply #'+ (mapcar #'* list1 list2)))
|
||||||
|
|
||||||
|
|
||||||
|
;;; Chapter 2
|
||||||
|
|
||||||
|
(defun mappend (fn list)
|
||||||
|
"Apply FN to each element of LIST and append the results."
|
||||||
|
(apply #'append (mapcar fn list)))
|
||||||
|
|
||||||
|
(defun one-of (set)
|
||||||
|
"Pick one element of SET, and make a list of it."
|
||||||
|
(list (random-elt set)))
|
||||||
|
|
||||||
|
(defun random-elt (choices)
|
||||||
|
"Choose a random element from list CHOICES."
|
||||||
|
(elt choices (random (length choices))))
|
||||||
|
|
||||||
|
(defparameter *simple-grammar*
|
||||||
|
'((sentence (noun-phrase verb-phrase))
|
||||||
|
(noun-phrase (Article Noun))
|
||||||
|
(verb-phrase (Verb noun-phrase))
|
||||||
|
(Article the a)
|
||||||
|
(Noun man ball woman table)
|
||||||
|
(Verb hit took saw liked))
|
||||||
|
"A grammar for a trivial subset of English.")
|
||||||
|
|
||||||
|
(defvar *grammar* *simple-grammar*
|
||||||
|
"The grammar used by `generate'.")
|
||||||
|
|
||||||
|
(defun rule-lhs (rule)
|
||||||
|
"The left-hand side of a RULE."
|
||||||
|
(first rule))
|
||||||
|
|
||||||
|
(defun rule-rhs (rule)
|
||||||
|
"The right-hand side of a RULE."
|
||||||
|
(rest rule))
|
||||||
|
|
||||||
|
(defun rewrites (category)
|
||||||
|
"Return a list of the possible rewrites for CATEGORY."
|
||||||
|
(rule-rhs (assoc category *grammar*)))
|
||||||
|
|
||||||
|
;; 2.1. Write a version of `generate' that uses `cond' but avoids calling
|
||||||
|
;; `rewrites' twice.
|
||||||
|
(defun generate (phrase)
|
||||||
|
"Generate a random LHS present in `*grammar*'."
|
||||||
|
(let ((rw-list (rewrites phrase)))
|
||||||
|
(cond ((listp phrase) (mappend #'generate phrase))
|
||||||
|
(rw-list (generate (random-elt rw-list)))
|
||||||
|
(t (list phrase)))))
|
||||||
|
|
||||||
|
;; 2.2. Write a version of `generate' that explicitly differentiates between
|
||||||
|
;; terminal symbols (those with no rewrite rules) and nonterminal symbols.
|
||||||
|
|
||||||
|
;; I'm gonna be honest, this one is tougher. I'm going to let it sit a minute.
|
||||||
|
;; (defun generate2 (phrase)
|
||||||
|
;; (let ((rw-list (rewrites phrase)))
|
||||||
|
;; (if rw-list
|
||||||
|
;; (let ((relt (random-elt rw-list)))
|
||||||
|
;; (if (listp relt)
|
||||||
|
;; (mappend #'generate2 phrase)
|
||||||
|
;; (generate2 relt)))
|
||||||
|
;; (list phrase))))
|
||||||
|
|
||||||
|
(defparameter *bigger-grammar*
|
||||||
|
'((sentence (noun-phrase verb-phrase))
|
||||||
|
(noun-phrase (Article Adj* Noun PP*) (Name) (Pronoun))
|
||||||
|
(verb-phrase (Verb noun-phrase PP*))
|
||||||
|
(PP* () (PP PP*))
|
||||||
|
(Adj* () (Adj Adj*))
|
||||||
|
(PP (Prep noun-phrase))
|
||||||
|
(Prep to in by with on)
|
||||||
|
(Adj big little blue green adiabatic)
|
||||||
|
(Article the a)
|
||||||
|
(Name Pat Kim Lee Terry Robin)
|
||||||
|
(Noun man ball woman table)
|
||||||
|
(Verb hit took saw liked)
|
||||||
|
(Pronoun he she it these those that)))
|
||||||
|
|
||||||
|
(setf *grammar* *bigger-grammar*)
|
||||||
|
|
||||||
|
(defun generate-tree (phrase)
|
||||||
|
"Generate a random PHRASE, with a complete parse tree."
|
||||||
|
(cond ((listp phrase) (mapcar #'generate-tree phrase))
|
||||||
|
((rewrites phrase) (cons phrase
|
||||||
|
(generate-tree (random-elt (rewrites phrase)))))
|
||||||
|
(t (list phrase))))
|
||||||
|
|
||||||
|
(defun generate-all (phrase)
|
||||||
|
"Generate a list of all possible expansions of PHRASE."
|
||||||
|
(cond ((null phrase) (list nil))
|
||||||
|
((listp phrase)
|
||||||
|
(combine-all (generate-all (first phrase))
|
||||||
|
(generate-all (rest phrase))))
|
||||||
|
((rewrites phrase)
|
||||||
|
(mappend #'generate-all (rewrites phrase)))
|
||||||
|
(t (list (list phrase)))))
|
||||||
|
|
||||||
|
(defun combine-all (xlist ylist)
|
||||||
|
"Return a list of lists formed by appending a YLIST to an XLIST.
|
||||||
|
|
||||||
|
E.g., (combine-all '((a) (b)) '((1) (2)))
|
||||||
|
=> ((A 1) (B 1) (A 2) (B 2))."
|
||||||
|
(cross-product #'append xlist ylist))
|
||||||
|
|
||||||
|
;; Exercise 2.4 [m] One way of describing combine-all is that it calculates the
|
||||||
|
;; cross-product of the function append on the argument lists. Write the
|
||||||
|
;; higher-order function cross-product, and define combine-all in terms of it.
|
||||||
|
;; The moral is to make your code as general as possible, because you never
|
||||||
|
;; know what you may want to do with it next.
|
||||||
|
;; NOTE[acd]: it's the CARTESIAN product.
|
||||||
|
|
||||||
|
(defun cross-product (fn as bs)
|
||||||
|
"Calculate the result of passing FN to the cross (or Cartesian) product of
|
||||||
|
lists of AS and BS."
|
||||||
|
(mappend #'(lambda (b)
|
||||||
|
(mapcar #'(lambda (a) (funcall fn a b)) as))
|
||||||
|
bs))
|
||||||
|
|
||||||
|
|
||||||
|
;;; Chapter 3
|
||||||
|
|
||||||
|
;; Exercise 3.1 [m] Show a lambda expression that is equivalent to the below
|
||||||
|
;; let* expression. You may need more than one lambda.
|
||||||
|
;; (let* ((x 6)
|
||||||
|
;; (y (* x x)))
|
||||||
|
;; (+ x y)) => 42
|
||||||
|
|
||||||
|
(defun test-let*-lambda ()
|
||||||
|
(list
|
||||||
|
;; let* expression
|
||||||
|
(let* ((x 6)
|
||||||
|
(y (* x x)))
|
||||||
|
(+ x y))
|
||||||
|
;; lambda expression
|
||||||
|
((lambda (x)
|
||||||
|
(+ x ((lambda (y) (* y y)) x)))
|
||||||
|
6)))
|
||||||
|
|
||||||
|
;; Various forms of length using different looping structures
|
||||||
|
|
||||||
|
(defun length1 (list)
|
||||||
|
(let ((len 0))
|
||||||
|
(dolist (element list)
|
||||||
|
(incf len))
|
||||||
|
len))
|
||||||
|
|
||||||
|
(defun length1.1 (list)
|
||||||
|
(let ((len 0))
|
||||||
|
(dolist (element list len)
|
||||||
|
(incf len))))
|
||||||
|
|
||||||
|
(defun length2 (list)
|
||||||
|
(let ((len 0))
|
||||||
|
(mapc #'(lambda (element)
|
||||||
|
(declare (ignore element))
|
||||||
|
(incf len))
|
||||||
|
list)
|
||||||
|
len))
|
||||||
|
|
||||||
|
(defun length3 (list)
|
||||||
|
(do ((len 0 (+ len 1))
|
||||||
|
(l list (rest l)))
|
||||||
|
((null l) len)))
|
||||||
|
|
||||||
|
(defun length4 (list)
|
||||||
|
(loop :for element :in list
|
||||||
|
:count t))
|
||||||
|
|
||||||
|
(defun length4.1 (list)
|
||||||
|
(loop :for element :in list
|
||||||
|
:summing 1))
|
||||||
|
|
||||||
|
(defun length4.2 (list)
|
||||||
|
(loop :for element := (pop list)
|
||||||
|
:with len := 0
|
||||||
|
:until (null list)
|
||||||
|
:do (incf len)
|
||||||
|
:finally (return len)))
|
||||||
|
|
||||||
|
(defun length5 (list)
|
||||||
|
(count-if #'true list))
|
||||||
|
|
||||||
|
(defun true (x)
|
||||||
|
(declare (ignore x))
|
||||||
|
t)
|
||||||
|
|
||||||
|
;; not the most straightforward ;P
|
||||||
|
(defun length6 (list)
|
||||||
|
(if (null list)
|
||||||
|
0
|
||||||
|
(+ 1 (position-if #'true list :from-end t))))
|
||||||
|
|
||||||
|
;; NOT TAIL RECURSIVE -- length7 calls itself, then adds 1, then returns
|
||||||
|
(defun length7 (list)
|
||||||
|
(if (null list)
|
||||||
|
0
|
||||||
|
(+ 1 (length7 (rest list)))))
|
||||||
|
|
||||||
|
;; TAIL RECURSIVE -- length8-aux calls itself LAST
|
||||||
|
(defun length8 (list)
|
||||||
|
(length8-aux list 0))
|
||||||
|
|
||||||
|
(defun length8-aux (sublist len-so-far)
|
||||||
|
(if (null sublist)
|
||||||
|
len-so-far
|
||||||
|
(length8-aux (rest sublist) (+ 1 len-so-far))))
|
||||||
|
|
||||||
|
;; other options to avoid 2 functions
|
||||||
|
(defun length8-optional (list &optional (len-so-far 0))
|
||||||
|
(if (null list)
|
||||||
|
len-so-far
|
||||||
|
(length8-optional (rest list) (+ 1 len-so-far))))
|
||||||
|
|
||||||
|
(defun length8-labels (list)
|
||||||
|
(labels ((length8-inside-label (the-list len-so-far)
|
||||||
|
(if (null the-list)
|
||||||
|
len-so-far
|
||||||
|
(length8-inside-label (rest the-list) (+ 1 len-so-far)))))
|
||||||
|
(length8-inside-label list 0)))
|
||||||
|
|
||||||
|
;; example of RETURN special form
|
||||||
|
;; `dolist' has an implicit `block' form that `return' returns to
|
||||||
|
(defun product (numbers)
|
||||||
|
"Multiply all the numbers together to compute their product."
|
||||||
|
(let ((prod 1))
|
||||||
|
(dolist (n numbers prod)
|
||||||
|
(format t "~a ~a~%" n prod)
|
||||||
|
(if (= n 0)
|
||||||
|
(return 0)
|
||||||
|
(setf prod (* n prod))))))
|
|
@ -0,0 +1,3 @@
|
||||||
|
;;; part-2
|
||||||
|
|
||||||
|
(in-package :paip)
|
|
@ -0,0 +1,3 @@
|
||||||
|
;;; part-3.lisp
|
||||||
|
|
||||||
|
(in-package :paip)
|
|
@ -0,0 +1,3 @@
|
||||||
|
;;; part-4
|
||||||
|
|
||||||
|
(in-package :paip)
|
|
@ -0,0 +1,3 @@
|
||||||
|
;;; part-5
|
||||||
|
|
||||||
|
(in-package :paip)
|
Loading…
Reference in New Issue