SICP 4.4.1 Ex. 4.63

  • 投稿日:
  • カテゴリ:

Ex. 4.63

(rule (grandson ?G ?S)
      (and (son ?F ?S)
	   (son ?G ?F)))

(rule (son ?M ?S)       ;;; ← rule の名前と DBのレコードの名前が重なっていてもうまく処理されるみたい
      (and (wife ?M ?W)
	   (son ?W ?S)))

実行する

;;; Query input:
(grandson Cain ?)
;;; Query results:
(grandson Cain Irad)

;;; Query input:
(grandson Methushael ?)
;;; Query results:
(grandson Methushael Jubal)
(grandson Methushael Jabal)

DBのレコードから見つかる son も、rule で見つかる son もどちらも探してくれる。

rule の名前と DBのレコードの名前が重なった場合、質問システムは 「rule の結果」 or 「DBのレコード検索の結果」を返してくれるようだ。(or は和集合ということ)