問題4.51 – SICP(計算機プログラムの構造と解釈)その223
問題4.51 変数を元の値に戻す失敗継続(p257 analyze-assignment の注釈*2*)を、元の値に戻さずにそのまま失敗を継続させる。 (define (analyze exp) (cond ((self-evaluating? exp) (analyze-self-evaluating exp)) ;; 省略 ((passignment? exp) (analyze-perman…続きを読む
問題4.51 変数を元の値に戻す失敗継続(p257 analyze-assignment の注釈*2*)を、元の値に戻さずにそのまま失敗を継続させる。 (define (analyze exp) (cond ((self-evaluating? exp) (analyze-self-evaluating exp)) ;; 省略 ((passignment? exp) (analyze-perman…続きを読む
問題4.50 ramb の実装はすぐできたけれども、問題4.49の Alyssa の問題を ramb で解こうとしても上手くいかなかったので写経することにした。 最初に考えた解答は、単純に ramb-choices で選択肢リストをシャッフルした。 (define (analyze exp) (cond ((self-evaluating? exp) (analyze-self-evaluatin…続きを読む
問題4.49 各語のリストを amb で選び出して作る。 p253 の脚注にあるように、実行結果が "再帰の一つに「落ち込み」" 止ってしまっている。 問題4.50の特殊形式 ramb でこの問題は解決できるらしい。 (define (require p) (if (not p) (amb))) (define nouns (list ‘noun (amb ‘student ‘…続きを読む
副詞(adverb)、形容詞(adjective)を含めるように拡張する。 合成文はパス。 (define (require p) (if (not p) (amb))) (define nouns ‘(noun student professor cat class bed)) (define verbs ‘(verb studies lectures eats sleeps runs)) (d…続きを読む
問題4.46 set! で *unparsed* の先頭から解析をして語句を抜き取ってゆき解析結果を作るようになっているため、構文解析プログラムは amb の評価順序に依存している。 問題4.47 (parse-word verbs) に失敗すると (parse-verb-phrase) が無限ループに陥るために、構文解析に成功する間は動作するが、解析パターンが出尽くした後は "Ther…続きを読む
問題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 preposi…続きを読む
問題4.44 エイトクイーンパズルの問題。 8×8 の盤にしか対応していないけれど、これでよしとする。 あまりにも処理に時間がかかったので、こまめに distinct? を使うようにした。 (define (require p) (if (not p) (amb))) (define (queen-puzzle) (let ((q1 (amb 1 2 3 4 5 6 7 8))) (le…続きを読む
問題4.43 問題文には記載されていないが、Parker のヨット名が Mary Ann であることは自明。 よって、以下の様な関係がわかっている。 父 娘 ヨット Moore Mary Ann Lorna Downing Melissa Hall Rosalind Barnacle Hood Melissa Gabrielle Parker Mary A…続きを読む
問題4.42 amb 評価器に or が無かったので追加する。 (define (analyze exp) (cond ((self-evaluating? exp) ;; 省略 ((or? exp) (analyze (or->if exp))) ;; 省略 (else (error "Unknown expression type — ANALYZE" exp)))…続きを読む
問題4.41 手を抜いて、順列リストの生成には Gauche の permutations 手続き(Gauche ユーザリファレンス: 11.41 util.combinations – 組み合わせ)を利用する。 (use srfi-1) ; for filter (use util.combinations) ; for permutations (define (multiple-…続きを読む