(wat-aro)

生きてます

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