問題4.66 – SICP(計算機プログラムの構造と解釈)その239
問題4.66 (define (accumlation-function-of-sum query frame-stream) (let ((sum 0) ;; アキュムレートの初期値 (query-pattern (cadr query)) ;; 質問パターン (var (car query))) ;; 変数 (stream-for-each (lambda (frame) (let ((val…続きを読む
問題4.66 (define (accumlation-function-of-sum query frame-stream) (let ((sum 0) ;; アキュムレートの初期値 (query-pattern (cadr query)) ;; 質問パターン (var (car query))) ;; 変数 (stream-for-each (lambda (frame) (let ((val…続きを読む
問題4.65 4.4.1節の wheel 規則 (assert! (rule (wheel ?person) (and (supervisor ?middle-manager ?person) (supervisor ?x ?middle-manager)))) 実行結果 ;;; Query input: (wheel ?who) ;;; Query results: (wheel (Warbuc…続きを読む
問題4.64 ;; 元の outranked-by 規則 (assert! (rule (outranked-by ?staff-person ?boss) (or (supervisor ?staff-person ?boss) (and (supervisor ?staff-person ?middle-maneger) (outranked-by ?middle-maneger ?boss)…続きを読む
問題4.63 Adam の子孫のデータベース (assert! (son Adam Cain)) (assert! (son Cain Enoch)) (assert! (son Enoch Irad)) (assert! (son Irad Mehujael)) (assert! (son Mehujael Methushael)) (assert! (son Methushael Lamech…続きを読む
問題4.62 リストの car が x で、cdr が () の場合 x が最後の要素となる。 任意の x, y, z において、y が最後の要素 z であるならば、(cons x y) の最後の要素は z となる。 (assert! (rule (last-pair (?x . ()) (?x)))) (assert! (rule (last-pair (?x . ?y) ?z) (last-p…続きを読む
問題4.61 最初の規則(rule)だけでは先頭からの2つの要素の隣接関係しか見つけられない。 2番目の規則(rule)によって連続する要素を再帰的に調べていく。 ; 調査対象リストの最初の 1, 2 番目の要素を next-to 関係とする。 (assert! (rule (?x next-to ?y in (?x ?y . ?u)))) ; 調査対象リストの内、2番目の要素以降のリストを調べる…続きを読む
問題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…続きを読む