2016/01/16
SICP 問題 4.60
最初の質問をすると近くに住む人の対になるので2つずつ表示される.
(lives-near ?person-1 ?person2)
;; 例
(lives-near (Hacker Alyssa P) (Fect Cy D))
(lives-near (Fect Cy D) (Hacker Alyssa P))
これを防ぐために各人にIDを割り振る.
;; 例
(id (Bitdiddle Ben) 0)
;; そしてlives-nearをidの若いほうから表示するように書き換える
(rule (lives-near? ?person-1 ?person-2)
(and (address ?person-1 (?town . ?rest-1))
(address ?person-2 (?town . ?rest-2))
(not (same ?person-1 ?person-2))
(id ?person1 ?id1)
(id ?person2 ?id2)
(lisp-value < ?id1 ?id2)))