問題4.61 – SICP(計算機プログラムの構造と解釈)その234

問題4.61

最初の規則(rule)だけでは先頭からの2つの要素の隣接関係しか見つけられない。
2番目の規則(rule)によって連続する要素を再帰的に調べていく。

; 調査対象リストの最初の 1, 2 番目の要素を next-to 関係とする。
(assert! (rule (?x next-to ?y in (?x ?y . ?u))))

; 調査対象リストの内、2番目の要素以降のリストを調べる。
(assert! (rule (?x next-to ?y in (?v . ?z))
               (?x next-to ?y in ?z)))

実行結果

;;; Query input:
(?x next-to ?y in (1 (2 3) 4))

;;; Query results:
((2 3) next-to 4 in (1 (2 3) 4))
(1 next-to (2 3) in (1 (2 3) 4))

;;; Query input:
(?x next-to 1 in (2 1 3 1))

;;; Query results:
(3 next-to 1 in (2 1 3 1))
(2 next-to 1 in (2 1 3 1))

1番目の規則(rule)のみを定義した場合の実行結果。
先頭からの2つの要素しか調べていないことがわかる。

;;; Query input:
(?x next-to ?y in (1 (2 3) 4))

;;; Query results:
(1 next-to (2 3) in (1 (2 3) 4))

;;; Query input:
(?x next-to 1 in (2 1 3 1))

;;; Query results:
(2 next-to 1 in (2 1 3 1))
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»