(wat-aro)

無職から有職者にランクアップしました

SICP 問題 4.47

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

(parse '(the student with the cat sleeps in the class))これを例に考える.
verbが問題なのでsleeps in the classだけに絞る. これは

(verb-phrase
 (verb sleeps)
 (prep-phrase (prep in)
              (simple-noun-phrase
               (article the) (noun class))))

となってほしい.
まず(parse-word verbs)が評価されunparsedはcdrがset!されて(list verb sleeps)が返る.
unparsedはまだ残っているので(parse input)の(require (null? unparsed))で失敗して次にいく.
次はparse-verb-phraseなのでまた(parse-word verbs)を評価する.
しかし,unparsedに入っているのはinなので失敗する.
そうするとambの次の要素にいくのでまたparse-verb-phraseを評価する.
同じく失敗する.このまま無限ループに入って終了しない.

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

計算機プログラムの構造と解釈 第2版

計算機プログラムの構造と解釈 第2版