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)))