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

問題4.62

リストの carx で、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-pair ?y ?z)))

実行結果

;;; Query input:
(last-pair (3) ?x)

;;; Query results:
(last-pair (3) (3))

;;; Query input:
(last-pair (1 2 3) ?x)

;;; Query results:
(last-pair (1 2 3) (3))

;;; Query input:
(last-pair (2 ?x) (3))

;;; Query results:
(last-pair (2 3) (3))

;;; Query input:
(last-pair ?x (3))

無限ループ...
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»