問題4.45 – SICP(計算機プログラムの構造と解釈)その218

問題4.45

(define (require p)
  (if (not p) (amb)))

(define nouns '(noun student professor cat class))
(define verbs '(verb studies lectures eats sleeps))
(define articles '(article the a))
(define prepositions '(prep for to in by with))

(define (parse-prepositional-phrase)
  (list 'prep-phrase
        (parse-word prepositions)
        (parse-noun-phrase)))

(define (parse-sentense)
  (list 'sentense
        (parse-noun-phrase)
        (parse-verb-phrase)))

(define (parse-verb-phrase)
  (define (maybe-extend verb-phrase)
    (amb verb-phrase
         (maybe-extend (list 'verb-phrase
                             verb-phrase
                             (parse-prepositional-phrase)))))
  (maybe-extend (parse-word verbs)))

(define (parse-simple-noun-phrase)
  (list 'simple-noun-phrase
        (parse-word articles)
        (parse-word nouns)))

(define (parse-noun-phrase)
  (define (maybe-extend noun-phrase)
    (amb noun-phrase
         (maybe-extend (list 'noun-phrase
                             noun-phrase
                             (parse-prepositional-phrase)))))
  (maybe-extend (parse-simple-noun-phrase)))

(define (parse-word word-list)
  (require (not (null? *unparsed*)))
  (require (memq (car *unparsed*) (cdr word-list)))
  (let ((found-word (car *unparsed*)))
       (set! *unparsed* (cdr *unparsed*))
       (list (car word-list) found-word)))

(define *unparsed* '())

(define (parse input)
  (set! *unparsed* input)
  (let ((sent (parse-sentense)))
       (require (null? *unparsed*))
       sent))

(parse '(the professor lectures to the student in the class with the cat))

実行結果

;;; Amb-Eval input:
(parse '(the professor lectures to the student in the class with the cat))

;;; Starting a new problem 
;;; Amb-Eval value:
(sentense (simple-noun-phrase (article the) (noun professor)) (verb-phrase (verb-phrase (verb-phrase (verb lectures) (prep-phrase (prep to) (simple-noun-phrase (article the) (noun student)))) (prep-phrase (prep in) (simple-noun-phrase (article the) (noun class)))) (prep-phrase (prep with) (simple-noun-phrase (article the) (noun cat)))))

;;; Amb-Eval input:
try-again

;;; Amb-Eval value:
(sentense (simple-noun-phrase (article the) (noun professor)) (verb-phrase (verb-phrase (verb lectures) (prep-phrase (prep to) (simple-noun-phrase (article the) (noun student)))) (prep-phrase (prep in) (noun-phrase (simple-noun-phrase (article the) (noun class)) (prep-phrase (prep with) (simple-noun-phrase (article the) (noun cat)))))))

;;; Amb-Eval input:
try-again

;;; Amb-Eval value:
(sentense (simple-noun-phrase (article the) (noun professor)) (verb-phrase (verb-phrase (verb lectures) (prep-phrase (prep to) (noun-phrase (simple-noun-phrase (article the) (noun student)) (prep-phrase (prep in) (simple-noun-phrase (article the) (noun class)))))) (prep-phrase (prep with) (simple-noun-phrase (article the) (noun cat)))))

;;; Amb-Eval input:
try-again

;;; Amb-Eval value:
(sentense (simple-noun-phrase (article the) (noun professor)) (verb-phrase (verb lectures) (prep-phrase (prep to) (noun-phrase (noun-phrase (simple-noun-phrase (article the) (noun student)) (prep-phrase (prep in) (simple-noun-phrase (article the) (noun class)))) (prep-phrase (prep with) (simple-noun-phrase (article the) (noun cat)))))))

;;; Amb-Eval input:
try-again

;;; Amb-Eval value:
(sentense (simple-noun-phrase (article the) (noun professor)) (verb-phrase (verb lectures) (prep-phrase (prep to) (noun-phrase (simple-noun-phrase (article the) (noun student)) (prep-phrase (prep in) (noun-phrase (simple-noun-phrase (article the) (noun class)) (prep-phrase (prep with) (simple-noun-phrase (article the) (noun cat)))))))))

;;; Amb-Eval input:
try-again

;;; There are no more values of
(parse '(the professor lectures to the student in the class with the cat))

結果をインデントして読みやすくする。

(sentense
  (simple-noun-phrase (article the) (noun professor))
  (verb-phrase
    (verb-phrase
      (verb-phrase
        (verb lectures)
        (prep-phrase (prep to)
                     (simple-noun-phrase
                       (article the) (noun student))))
      (prep-phrase (prep in)
                   (simple-noun-phrase
                     (article the) (noun class))))
    (prep-phrase (prep with)
                 (simple-noun-phrase
                   (article the) (noun cat)))))
; (the professor) ((lectures) (to the student) (in the class) (with the cat))
; 教授は生徒に講義する、教室で、ネコと共に。

(sentense
  (simple-noun-phrase (article the) (noun professor))
  (verb-phrase
    (verb-phrase
      (verb lectures)
      (prep-phrase (prep to)
                   (simple-noun-phrase (article the) (noun student))))
    (prep-phrase (prep in)
                 (noun-phrase
                   (simple-noun-phrase (article the) (noun class))
                   (prep-phrase (prep with)
                                (simple-noun-phrase (article the) (noun cat)))))))
; (the professor) (((lectures) (to the student)) ((in the class) (with the cat)))
; 教授は生徒に講義する、ネコのいる教室で。

(sentense
  (simple-noun-phrase (article the) (noun professor))
  (verb-phrase
    (verb-phrase
      (verb lectures)
      (prep-phrase (prep to)
                   (noun-phrase
                     (simple-noun-phrase (article the) (noun student))
                     (prep-phrase (prep in)
                                  (simple-noun-phrase (article the) (noun class))))))
    (prep-phrase (prep with)
                 (simple-noun-phrase (article the) (noun cat)))))
; (the professor) (((lectures) (to the student) (in the class)) (with the cat))
; 教授は教室にいる生徒に講義する、ネコと共に。

(sentense
  (simple-noun-phrase (article the) (noun professor))
  (verb-phrase
    (verb lectures)
    (prep-phrase (prep to)
                 (noun-phrase
                   (noun-phrase
                     (simple-noun-phrase (article the) (noun student))
                     (prep-phrase (prep in)
                                  (simple-noun-phrase (article the) (noun class))))
                   (prep-phrase (prep with)
                                (simple-noun-phrase (article the) (noun cat)))))))
; (the professor) ((lectures) (to the student) (in the class) (with the cat))
; 教授は、教室にネコと共にいる生徒に講義する。

(sentense
  (simple-noun-phrase (article the) (noun professor))
  (verb-phrase
    (verb lectures)
    (prep-phrase (prep to)
                 (noun-phrase
                   (simple-noun-phrase (article the) (noun student))
                   (prep-phrase (prep in)
                                (noun-phrase
                                  (simple-noun-phrase (article the) (noun class))
                                  (prep-phrase (prep with)
                                               (simple-noun-phrase (article the) (noun cat)))))))))
; (the procedure) ((lectures) ((to the student) (in the class) (with the cat)))
; 教授はネコのいる教室の中の生徒に講義する。
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»