Advertisement
timothy235

sicp-4-3-2-examples-of-nondeterministic-programs

Mar 22nd, 2017
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 20.06 KB | None | 0 0
  1. #lang racket
  2.  
  3. ;;;;;;;;;;
  4. ;; 4.38 ;;
  5. ;;;;;;;;;;
  6.  
  7. (define (partial-solution? baker cooper fletcher miller smith)
  8.   (and ; (distinct? (list baker cooper fletcher miller smith))
  9.        (not (= baker 5))
  10.        (not (= cooper 1))
  11.        (not (= fletcher 5))
  12.        (not (= fletcher 1))
  13.        (> miller cooper)
  14.        ; (not (= (abs (- smith fletcher)) 1))
  15.        (not (= (abs (- fletcher cooper)) 1))))
  16.  
  17. (define (solve-partial-multiple-dwelling)
  18.   (for/list ([floors (in-permutations (range 1 6))]
  19.              #:when (apply partial-solution? floors))
  20.             (map list
  21.                  '(baker cooper fletcher miller smith)
  22.                  floors)))
  23.  
  24. (solve-partial-multiple-dwelling)
  25. ;; '(((baker 3) (cooper 4) (fletcher 2) (miller 5) (smith 1))
  26.   ;; ((baker 3) (cooper 2) (fletcher 4) (miller 5) (smith 1))
  27.   ;; ((baker 1) (cooper 4) (fletcher 2) (miller 5) (smith 3))
  28.   ;; ((baker 1) (cooper 2) (fletcher 4) (miller 5) (smith 3))
  29.   ;; ((baker 1) (cooper 2) (fletcher 4) (miller 3) (smith 5)))
  30.  
  31. ;; So there are five solutions to the modified problem.
  32.  
  33. ;;;;;;;;;;
  34. ;; 4.39 ;;
  35. ;;;;;;;;;;
  36.  
  37. ;; If computing whether the restrictions are satisfied takes a long time, then it
  38. ;; would make sense to put the most stringent restrictions first, to save having to
  39. ;; check later restrictions.  However, I doubt checking the restrictions takes
  40. ;; significant time compared to generating all the tuples.  So I don't think the
  41. ;; order matters very much.
  42.  
  43. ;;;;;;;;;;
  44. ;; 4.40 ;;
  45. ;;;;;;;;;;
  46.  
  47. ;; The number of non-distinct assignments is 5 ^ 5 = 3125.  The number of distinct
  48. ;; assignments is 5! = 120.
  49.  
  50. #|
  51. (define (multiple-dwelling)
  52.   (let ([baker (amb 1 2 3 4 5)])
  53.     (my-require (not (= baker 5)))
  54.     (let ([cooper (amb 1 2 3 4 5)])
  55.       (my-require (not (= cooper 1)))
  56.       (let ([fletcher (amb 1 2 3 4 5)])
  57.         (my-require (not (= fletcher 5)))
  58.         (my-require (not (= fletcher 1)))
  59.         (my-require (not (= (abs (- fletcher cooper)) 1)))
  60.         (let ([miller (amb 1 2 3 4 5)])
  61.           (my-require (> miller cooper))
  62.           (let ([smith (amb 1 2 3 4 5)])
  63.             (my-require (not (= (abs (- smith fletcher)) 1)))
  64.             (my-require (distinct? (list baker cooper fletcher miller smith)))
  65.             (list (list 'baker baker)
  66.                   (list 'cooper cooper)
  67.                   (list 'fletcher fletcher)
  68.                   (list 'miller miller)
  69.                   (list 'smith smith))))))))
  70. |#
  71.  
  72. ;;;;;;;;;;
  73. ;; 4.41 ;;
  74. ;;;;;;;;;;
  75.  
  76. (define (solution? baker cooper fletcher miller smith)
  77.   (and ; (distinct? (list baker cooper fletcher miller smith))
  78.        (not (= baker 5))
  79.        (not (= cooper 1))
  80.        (not (= fletcher 5))
  81.        (not (= fletcher 1))
  82.        (> miller cooper)
  83.        (not (= (abs (- smith fletcher)) 1))
  84.        (not (= (abs (- fletcher cooper)) 1))))
  85.  
  86. (define (solve-multiple-dwelling)
  87.   (for/list ([floors (in-permutations (range 1 6))]
  88.              #:when (apply solution? floors))
  89.             (map list
  90.                  '(baker cooper fletcher miller smith)
  91.                  floors)))
  92.  
  93. (solve-multiple-dwelling)
  94. ;; '(((baker 3) (cooper 2) (fletcher 4) (miller 5) (smith 1)))
  95.  
  96. ;;;;;;;;;;
  97. ;; 4.42 ;;
  98. ;;;;;;;;;;
  99.  
  100. (define (liars-solution? betty ethel joan kitty mary)
  101.   (define betty1 (= kitty 2))
  102.   (define betty2 (= betty 3))
  103.   (define ethel1 (= ethel 1))
  104.   (define ethel2 (= joan 2))
  105.   (define joan1 (= joan 3))
  106.   (define joan2 (= ethel 5))
  107.   (define kitty1 (= kitty 2))
  108.   (define kitty2 (= mary 4))
  109.   (define mary1 (= mary 4))
  110.   (define mary2 (= betty 1))
  111.   (define (one-false-one-true? s1 s2)
  112.     (or (and s1 (not s2))
  113.         (and (not s1) s2)))
  114.   (and (one-false-one-true? betty1 betty2)
  115.        (one-false-one-true? ethel1 ethel2)
  116.        (one-false-one-true? joan1 joan2)
  117.        (one-false-one-true? kitty1 kitty2)
  118.        (one-false-one-true? mary1 mary2)))
  119.  
  120. (define (solve-liars)
  121.   (for/list ([places (in-permutations (range 1 6))]
  122.              #:when (apply liars-solution? places))
  123.             (map list
  124.                  '(betty ethel joan kitty mary)
  125.                  places)))
  126.  
  127. (solve-liars)
  128. ;; '(((betty 3) (ethel 5) (joan 2) (kitty 1) (mary 4)))
  129.  
  130. ;;;;;;;;;;
  131. ;; 4.43 ;;
  132. ;;;;;;;;;;
  133.  
  134. ;; Each has a require depending on parker, so parker is first.  Then I arranged them
  135. ;; by the number of requires each needed.
  136.  
  137. ;; Note that I did not try to pre-compute any of the assignments, even though we know
  138. ;; several of the men's yachts and some of their daughters.  That doesn't seem to be
  139. ;; in the spirit of this kind of program.
  140.  
  141. ;; Also note that the statement "Gabrielle's father's yacht is named after Parker's
  142. ;; daughter" means "X-daughter = 'gabrielle => X-yacht = parker-daughter", which is
  143. ;; equivalent to "X-daughter != 'gabrielle or X-yacht = parker-daughter" for each of
  144. ;; the five men X.
  145.  
  146. #|
  147. (define (fathers-daughters-and-yachts)
  148.   (define names '(mary-ann gabrielle lorna rosalind melissa))
  149.   (let ([parker-daughter (an-element-of names)]
  150.         [parker-yacht (an-element-of names)])
  151.     (my-require (not (eq? parker-daughter parker-yacht)))
  152.     (my-require (or (not (eq? parker-daughter 'gabrielle))
  153.                     (eq? parker-yacht parker-daughter)))
  154.     (let ([hood-daughter (an-element-of names)]
  155.           [hood-yacht (an-element-of names)])
  156.       (my-require (eq? hood-yacht 'gabrielle))
  157.       (my-require (eq? hood-daughter 'melissa))
  158.       (my-require (not (eq? hood-daughter hood-yacht)))
  159.       (my-require (or (not (eq? hood-daughter 'gabrielle))
  160.                       (eq? hood-yacht parker-daughter)))
  161.       (let ([moore-daughter (an-element-of names)]
  162.             [moore-yacht (an-element-of names)])
  163.         ;; (my-require (eq? moore-daughter 'mary-ann))
  164.         (my-require (eq? moore-yacht 'lorna))
  165.         (my-require (not (eq? moore-daughter moore-yacht)))
  166.         (my-require (or (not (eq? moore-daughter 'gabrielle))
  167.                         (eq? moore-yacht parker-daughter)))
  168.         (let ([downing-daughter (an-element-of names)]
  169.               [downing-yacht (an-element-of names)])
  170.           (my-require (eq? downing-yacht 'melissa))
  171.           (my-require (not (eq? downing-daughter downing-yacht)))
  172.           (my-require (or (not (eq? downing-daughter 'gabrielle))
  173.                           (eq? downing-yacht parker-daughter)))
  174.           (let ([hall-daughter (an-element-of names)]
  175.                 [hall-yacht (an-element-of names)])
  176.             (my-require (eq? hall-yacht 'rosalind))
  177.             (my-require (not (eq? hall-daughter hall-yacht)))
  178.             (my-require (or (not (eq? hall-daughter 'gabrielle))
  179.                             (eq? hall-yacht parker-daughter)))
  180.             (list (list 'moore moore-daughter)
  181.                   (list 'downing downing-daughter)
  182.                   (list 'hall hall-daughter)
  183.                   (list 'hood hood-daughter)
  184.                   (list 'parker parker-daughter))))))))
  185. |#
  186.  
  187. (define (partial-fd-solution?
  188.           moore-daughter
  189.           downing-daughter
  190.           hall-daughter
  191.           hood-daughter
  192.           parker-daughter
  193.           moore-yacht
  194.           downing-yacht
  195.           hall-yacht
  196.           hood-yacht
  197.           parker-yacht)
  198.   (and
  199.     (not (eq? moore-daughter moore-yacht))
  200.     (not (eq? downing-daughter downing-yacht))
  201.     (not (eq? hall-daughter hall-yacht))
  202.     (not (eq? hood-daughter hood-yacht))
  203.     (not (eq? parker-daughter parker-yacht))
  204.     ; (eq? moore-daughter 'mary-ann)
  205.     (eq? hood-yacht 'gabrielle)
  206.     (eq? moore-yacht 'lorna)
  207.     (eq? hall-yacht 'rosalind)
  208.     (eq? downing-yacht 'melissa)
  209.     (eq? hood-daughter 'melissa)
  210.     (or (not (eq? moore-daughter 'gabrielle))
  211.         (eq? moore-yacht parker-daughter))
  212.     (or (not (eq? downing-daughter 'gabrielle))
  213.         (eq? downing-yacht parker-daughter))
  214.     (or (not (eq? hall-daughter 'gabrielle))
  215.         (eq? hall-yacht parker-daughter))
  216.     (or (not (eq? hood-daughter 'gabrielle))
  217.         (eq? hood-yacht parker-daughter))
  218.     (or (not (eq? parker-daughter 'gabrielle))
  219.         (eq? parker-yacht parker-daughter))
  220.           ))
  221.  
  222. (define (solve-partial-fathers-and-daughters)
  223.   (define names '(mary-ann gabrielle lorna rosalind melissa))
  224.   (for*/list ([daughters (in-permutations names)]
  225.               [yachts (in-permutations names)]
  226.               #:when (apply partial-fd-solution?
  227.                             (append daughters yachts)))
  228.              (map list
  229.                   '(moore downing hall hood parker)
  230.                   daughters)))
  231.  
  232. (solve-partial-fathers-and-daughters)
  233. ;; '(((moore gabrielle)
  234.    ;; (downing rosalind)
  235.    ;; (hall mary-ann)
  236.    ;; (hood melissa)
  237.    ;; (parker lorna))
  238.   ;; ((moore mary-ann)
  239.    ;; (downing lorna)
  240.    ;; (hall gabrielle)
  241.    ;; (hood melissa)
  242.    ;; (parker rosalind)))
  243.  
  244. ;; If we don't know that moore-daughter = 'mary-ann, then there are two solutions.
  245.  
  246. ;;;;;;;;;;
  247. ;; 4.44 ;;
  248. ;;;;;;;;;;
  249.  
  250. ;; A queen is a list of two numbers, the row coordinate and the column coordinate.  A
  251. ;; position is a list of queens.
  252.  
  253. (define (make-queen row col) (list row col))
  254. (define (row-coord queen) (first queen))
  255. (define (col-coord queen) (second queen))
  256.  
  257. (define (safe? queen1 queen2)
  258.   (and (not (= (row-coord queen1)
  259.                (row-coord queen2)))
  260.        (not (= (abs (- (col-coord queen1)
  261.                        (col-coord queen2)))
  262.                (abs (- (row-coord queen1)
  263.                        (row-coord queen2)))))))
  264.  
  265. (define (safe-from-others? queen other-queens)
  266.   (andmap (lambda (q) (safe? queen q)) other-queens))
  267.  
  268. #|
  269. (define (queens)
  270.   (define rows (range 1 9))
  271.   (let ([row1 (an-element-of rows)]
  272.         [row2 (an-element-of rows)]
  273.         [row3 (an-element-of rows)]
  274.         [row4 (an-element-of rows)]
  275.         [row5 (an-element-of rows)]
  276.         [row6 (an-element-of rows)]
  277.         [row7 (an-element-of rows)]
  278.         [row8 (an-element-of rows)])
  279.     (define queen1 (make-queen row1 1))
  280.     (define queen2 (make-queen row2 2))
  281.     (define queen3 (make-queen row3 3))
  282.     (define queen4 (make-queen row4 4))
  283.     (define queen5 (make-queen row5 5))
  284.     (define queen6 (make-queen row6 6))
  285.     (define queen7 (make-queen row7 7))
  286.     (define queen8 (make-queen row8 8))
  287.     (define all-queens
  288.       (list queen1 queen2 queen3 queen4
  289.             queen5 queen6 queen7 queen8))
  290.     (define (queens-following queen)
  291.       (rest (member queen all-queens)))
  292.     (my-require (safe-from-others? queen1 (queens-following queen1)))
  293.     (my-require (safe-from-others? queen2 (queens-following queen2)))
  294.     (my-require (safe-from-others? queen3 (queens-following queen3)))
  295.     (my-require (safe-from-others? queen4 (queens-following queen4)))
  296.     (my-require (safe-from-others? queen5 (queens-following queen5)))
  297.     (my-require (safe-from-others? queen6 (queens-following queen6)))
  298.     (my-require (safe-from-others? queen7 (queens-following queen7)))
  299.     all-queens))
  300. |#
  301.  
  302. ;;;;;;;;;;
  303. ;; 4.45 ;;
  304. ;;;;;;;;;;
  305.  
  306. #|
  307.  
  308. ;; 1. The student is in the class, the student has a cat:
  309. ;; (the professor lectures) ((to the student in the class) with the cat)
  310. (sentence
  311.   (simple-noun-phrase (article the) (noun professor))
  312.   (verb-phrase
  313.     (verb lectures)
  314.     (prep-phrase (prep to)
  315.                  (noun-phrase
  316.                    (simple-noun-phrase
  317.                      (article the) (noun student))
  318.                    (prep-phrase (prep in)
  319.                                 (simple-noun-phrase
  320.                                   (article the) (noun class)))
  321.                    (prep-phrase (prep with)
  322.                                 (simple-noun-phrase
  323.                                   (article the) (noun cat)))))))
  324.  
  325. ;; 2. The student is in the class, the class has a cat:
  326. ;; (the professor lectures) (to the student (in the class with the cat))
  327. (sentence
  328.   (simple-noun-phrase (article the) (noun professor))
  329.   (verb-phrase
  330.     (verb lectures)
  331.     (prep-phrase (prep to)
  332.                  (noun-phrase
  333.                    (simple-noun-phrase
  334.                      (article the) (noun student))
  335.                    (prep-phrase (prep in)
  336.                                 (simple-noun-phrase
  337.                                   (article the) (noun class))
  338.                                 (prep-phrase (prep with)
  339.                                              (simple-noun-phrase
  340.                                                (article the) (noun cat))))))))
  341.  
  342. ;; 3. The student is in the class, the professor has a cat:
  343. ;; (the professor lectures) (to the student in the class) (with the cat)
  344. (sentence
  345.   (simple-noun-phrase (article the) (noun professor))
  346.   (verb-phrase
  347.     (verb lectures)
  348.     (prep-phrase (prep to)
  349.                  (noun-phrase
  350.                    (simple-noun-phrase
  351.                      (article the) (noun student))
  352.                    (prep-phrase (prep in)
  353.                                 (simple-noun-phrase
  354.                                   (article the) (noun class)))))
  355.     (prep-phrase (prep with)
  356.                  (simple-noun-phrase
  357.                    (article the) (noun cat)))))
  358.  
  359. ;; 4. The professor is in the class, the professor has a cat:
  360. ;; (the professor lectures) (to the student) (in the class) (with the cat)
  361. (sentence
  362.   (simple-noun-phrase (article the) (noun professor))
  363.   (verb-phrase
  364.     (verb lectures)
  365.     (prep-phrase (prep to)
  366.                  (noun-phrase
  367.                    (simple-noun-phrase
  368.                      (article the) (noun student))))
  369.     (prep-phrase (prep in)
  370.                  (simple-noun-phrase
  371.                    (article the) (noun class)))
  372.     (prep-phrase (prep with)
  373.                  (simple-noun-phrase
  374.                    (article the) (noun cat)))))
  375.  
  376. ;; 5. The professor is in the class, the class has a cat:
  377. ;; (the professor lectures) (to the student) (in the class with the cat)
  378. (sentence
  379.   (simple-noun-phrase (article the) (noun professor))
  380.   (verb-phrase
  381.     (verb lectures)
  382.     (prep-phrase (prep to)
  383.                  (noun-phrase
  384.                    (simple-noun-phrase
  385.                      (article the) (noun student))))
  386.     (prep-phrase (prep in)
  387.                  (simple-noun-phrase
  388.                    (article the) (noun class))
  389.                  (prep-phrase (prep with)
  390.                               (simple-noun-phrase
  391.                                 (article the) (noun cat))))))
  392.  
  393. |#
  394.  
  395. ;;;;;;;;;;
  396. ;; 4.46 ;;
  397. ;;;;;;;;;;
  398.  
  399. ;; None of the parsing procedures takes more than one parameter, so the order of
  400. ;; evaluation cannot matter.  What the authors must mean, is that the amb function
  401. ;; must do DFS starting with the left-most element of the list of elements to choose
  402. ;; from.  If that were not the case, then the maybe-extend procedures could not yield
  403. ;; a simple phrase, but would be forced to always choose an extended phrase.
  404.  
  405. ;;;;;;;;;;
  406. ;; 4.47 ;;
  407. ;;;;;;;;;;
  408.  
  409. ;; ; book definition
  410. ;; (define (parse-verb-phrase)
  411.   ;; (define (maybe-extend verb-phrase)
  412.     ;; (amb verb-phrase
  413.          ;; (maybe-extend (list 'verb-phrase
  414.                              ;; verb-phrase
  415.                              ;; (parse-prepositional-phrase)))))
  416.   ;; (maybe-extend (parse-word verbs)))
  417.  
  418. ;; ; loose reasoner definition
  419. ;; (define (parse-verb-phrase)
  420.   ;; (amb (parse-word verbs)
  421.        ;; (list 'verb-phrase
  422.              ;; (parse-verb-phrase)
  423.              ;; (parse-prepositional-phrase))))
  424.  
  425. ;; This does not work.  If the next unparsed word is not a verb, you would enter an
  426. ;; infinite loop, instead of doing the right thing and failing.
  427.  
  428. ;; If the order of the amb clauses was reversed, you would immediately fall into an
  429. ;; infinite loop irregardless of what the next word was.
  430.  
  431. ;;;;;;;;;;
  432. ;; 4.48 ;;
  433. ;;;;;;;;;;
  434.  
  435. ;; To add adjectives and adverbs, we need to use amb to make their appearance
  436. ;; optional at the beginning of a maybe extended noun or verb phrase.
  437.  
  438. #|
  439. (define (parse-simple-noun-phrase)
  440.   (list 'simple-noun-phrase
  441.         (parse-word articles)
  442.         (parse-word nouns)))
  443.  
  444. (define (parse-modified-noun-phrase)
  445.   (list 'modified-noun-phrase
  446.         (parse-word articles)
  447.         (parse-word adjectives)
  448.         (parse-word nouns)))
  449.  
  450. (define (parse-noun-phrase)
  451.   (define initial-noun-phrase
  452.     (amb (parse-simple-noun-phrase)
  453.          (parse-modified-noun-phrase)))
  454.   (define (maybe-extend noun-phrase)
  455.     (amb noun-phrase
  456.          (maybe-extend (list 'noun-phrase
  457.                              noun-phrase
  458.                              (parse-prepositional-phrase)))))
  459.   (maybe-extend initial-noun-phrase))
  460.  
  461. (define (parse-verb-phrase)
  462.   (define initial-verb-phrase
  463.     (amb (parse-word verbs)
  464.          (list 'modified-verb
  465.                (parse-word adverbs)
  466.                (parse-word verbs))))
  467.   (define (maybe-extend verb-phrase)
  468.     (amb verb-phrase
  469.          (maybe-extend (list 'verb-phrase
  470.                              verb-phrase
  471.                              (parse-prepositional-phrase)))))
  472.   (maybe-extend initial-verb-phrase))
  473. |#
  474.  
  475. ;;;;;;;;;;
  476. ;; 4.49 ;;
  477. ;;;;;;;;;;
  478.  
  479. ;; Originally I gave the parser/generator a 50/50 chance to use maybe-extend, but the
  480. ;; sentences were way too long.  So now the chance to use maybe-extend is 1 in 5.
  481.  
  482. (require racket/random) ; for random-ref, to randomly choose elt from a list
  483.  
  484. (define nouns '(noun student professor cat class))
  485. (define verbs '(verb studies lectures eats sleeps))
  486. (define articles '(article the a))
  487. (define prepositions '(prep for to in by with))
  488.  
  489. (define (generate-word word-list)
  490.   (list (first word-list)
  491.         (random-ref (rest word-list))))
  492.  
  493. (define (generate-prepositional-phrase)
  494.   (list 'prep-phrase
  495.         (generate-word prepositions)
  496.         (generate-noun-phrase)))
  497.  
  498. (define (generate-verb-phrase)
  499.   (define (maybe-extend verb-phrase)
  500.     (if (not (zero? (random 5))) ; 80% chance of true
  501.       verb-phrase
  502.       (maybe-extend (list 'verb-phrase
  503.                           verb-phrase
  504.                           (generate-prepositional-phrase)))))
  505.   (maybe-extend (generate-word verbs)))
  506.  
  507. (define (generate-simple-noun-phrase)
  508.   (list 'simple-noun-phrase
  509.         (generate-word articles)
  510.         (generate-word nouns)))
  511.  
  512. (define (generate-noun-phrase)
  513.   (define (maybe-extend noun-phrase)
  514.     (if (not (zero? (random 5)))
  515.       noun-phrase
  516.       (maybe-extend (list 'noun-phrase
  517.                           noun-phrase
  518.                           (generate-prepositional-phrase)))))
  519.   (maybe-extend (generate-simple-noun-phrase)))
  520.  
  521. (define (generate-sentence)
  522.   (list 'sentence
  523.         (generate-noun-phrase)
  524.         (generate-verb-phrase)))
  525.  
  526. #|
  527. (for ([i 6]) (displayln (generate-sentence)))
  528.  
  529. ;; "A class eats for a professor."
  530. (sentence
  531.   (simple-noun-phrase (article a)
  532.                       (noun class))
  533.   (verb-phrase (verb eats)
  534.                (prep-phrase (prep for)
  535.                             (simple-noun-phrase (article a)
  536.                                                 (noun professor)))))
  537.  
  538. ;; The professor for a student for a class with a professor studies by a class.
  539. (sentence
  540.   (noun-phrase
  541.     (noun-phrase
  542.       (noun-phrase
  543.         (simple-noun-phrase (article the)
  544.                             (noun professor))
  545.         (prep-phrase (prep for)
  546.                      (simple-noun-phrase (article a)
  547.                                          (noun student))))
  548.       (prep-phrase (prep for)
  549.                    (simple-noun-phrase (article a)
  550.                                        (noun class))))
  551.     (prep-phrase (prep with)
  552.                  (simple-noun-phrase (article a)
  553.                                      (noun professor))))
  554.   (verb-phrase (verb studies)
  555.                (prep-phrase (prep by)
  556.                             (simple-noun-phrase (article a)
  557.                                                 (noun class)))))
  558.  
  559. ;; A cat studies.
  560. (sentence
  561.   (simple-noun-phrase (article a)
  562.                       (noun cat))
  563.   (verb studies))
  564.  
  565. ;; A student lectures.
  566. (sentence
  567.   (simple-noun-phrase (article a)
  568.                       (noun student))
  569.   (verb lectures))
  570.  
  571. ;; The cat eats.
  572. (sentence
  573.   (simple-noun-phrase (article the)
  574.                       (noun cat))
  575.   (verb eats))
  576.  
  577. ;; The cat lectures.
  578. (sentence (simple-noun-phrase (article the)
  579.                               (noun cat))
  580.           (verb lectures))
  581. |#
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement