問題4.69 – SICP(計算機プログラムの構造と解釈)その241
問題4.69 問題4.63 のデータベースと各規則の子と孫の関係を利用する。 (assert! (rule ((great . ?rel) ?x ?y) (and (son-of ?x ?w) (?rel ?w ?y)))) (assert! (rule ((grandson) ?x ?y) (grandson-of ?x ?y))) 実行結果 ;;; Query input: ((great g…続きを読む
問題4.69 問題4.63 のデータベースと各規則の子と孫の関係を利用する。 (assert! (rule ((great . ?rel) ?x ?y) (and (son-of ?x ?w) (?rel ?w ?y)))) (assert! (rule ((grandson) ?x ?y) (grandson-of ?x ?y))) 実行結果 ;;; Query input: ((great g…続きを読む
問題4.68 (assert! (rule (append-to-form () ?y ?y))) (assert! (rule (append-to-form (?u . ?v) ?y (?u . ?z)) (append-to-form ?v ?y ?z))) (assert! (rule (reverse () ()))) (assert! (rule (reverse (?car . ?c…続きを読む
コレクションを操作する際に、各要素に変換を行った要素に基づいて操作を行うが、欲しい結果は変換を行った要素のコレクションではなく元の要素のコレクションである場合に利用する。 文字列の配列を大文字・小文字を無視してソートする場合を考える。 # 文字列の配列 ary = ["foo", "Bar", "baz", "HOGE"…続きを読む
問題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…続きを読む