問題4.60 – SICP(計算機プログラムの構造と解釈)その233
問題4.60 元の lives-near では重複する対が出てくるために結果の組み合わせ数が2倍になる。 (assert! (rule (lives-near ?person-1 ?person-2) (and (address ?person-1 (?town . ?rest-1)) (address ?person-2 (?town . ?rest-2)) (not (same ?person…続きを読む
問題4.60 元の lives-near では重複する対が出てくるために結果の組み合わせ数が2倍になる。 (assert! (rule (lives-near ?person-1 ?person-2) (and (address ?person-1 (?town . ?rest-1)) (address ?person-2 (?town . ?rest-2)) (not (same ?person…続きを読む
問題4.59 以下の表明をデータベースに追加する。 (assert! (meeting accounting (Monday 9am))) (assert! (meeting administration (Monday 10am))) (assert! (meeting computer (Wednesday 3pm))) (assert! (meeting administration (Fr…続きを読む
問題4.58 次の規則を定義する。 ある人の部門と、 ある人の supervisor の部門が異なる場合。 ある人は、その部門の big shot (黒幕)である。 (assert! (rule (same ?x ?x))) (assert! (rule (big-shot ?person) (and (job ?person (?section . ?type)) (supervisor ?pe…続きを読む
問題4.57 問題文が非常に解りにくい… "person-1 が person-2 と同じ担当である" というのはすぐ理解できるが、その次の条件がよく解らない。 (assert! (rule (same ?x ?x))) (assert! (rule (replace ?person-1 ?person-2) (and (or (and (job ?person-1…続きを読む
問題4.56 a. Ben Bitdiddle が監督している人すべての名前と住所 (and (supervisor ?x (Bitdiddle Ben)) (address ?x ?y)) 実行結果 ;;; Query input: (and (supervisor ?x (Bitdiddle Ben)) (address ?x ?y)) ;;; Query results: (and (sup…続きを読む
問題4.55 a. Ben Bitdiddle に監督されている人すべて (supervisor ?x (Bitdiddle Ben)) 実行結果 ;;; Query input: (supervisor ?x (Bitdiddle Ben)) ;;; Query results: (supervisor (Tweakit Lem E) (Bitdiddle Ben)) (supervisor (…続きを読む
プログラムが実際に動かないとつまらないので、今回も先に評価器を実装する。 "4.4.4 質問システムの実装" からの手続き群を丸写しする。 stream.scm、put、get の各手続きは3章で利用したものを使う。(p159) stream-append は 3.5.3節のものを、tagged-list? 、prompt-for-input は4.1節の超循環評価器のものを利…続きを読む
問題4.54 pred-value が false の場合に失敗継続を呼び出す。 (define (analyze exp) (cond ((self-evaluating? exp) (analyze-self-evaluating exp)) ;; 省略 ((require? exp) (analyze-require exp)) ;; 省略 (else (error "Unknow…続きを読む
問題4.53 (amb) があるために、if-fail の第1引数はバックトラックを繰り返して prime-sum-pair により全ての組み合わせを探索する。 また、permanent-set! で pairs にセットした値はバックトラックしても元の値に戻されないため、成功した組み合わせは pairs に追加されていく。 全ての組み合わせを探索し、選択を使い切った時、if-fail の第1引数…続きを読む
問題4.52 第1引数が成功した場合はそのまま成功継続を返し、失敗した場合は第2引数の評価を行う。 (define (analyze exp) (cond ((self-evaluating? exp) (analyze-self-evaluating exp)) ;; 省略 ((if-fail? exp) (analyze-if-fail exp)) ;; 省略 (else (error &qu…続きを読む