/
4_69.scm
44 lines (42 loc) · 1.38 KB
/
4_69.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
(load "ch4-4-setup.scm")
(run '(assert! (son Adam Cain)))
(run '(assert! (son Cain Enoch)))
(run '(assert! (son Enoch Irad)))
(run '(assert! (son Irad Mehujael)))
(run '(assert! (son Mehujael Methushael)))
(run '(assert! (son Methushael Lamech)))
(run '(assert! (wife Lamech Ada)))
(run '(assert! (son Ada Jabal)))
(run '(assert! (son Ada Jubal)))
(run '(assert!
(rule (grandson ?gf ?gs)
(and (son ?gf ?f) (son ?f ?gs)))))
(run '(assert!
(rule (son ?m ?s)
(and (wife ?m ?w) (son ?w ?s)))))
(run '(assert!
(rule (last-pair (?x) (?x)))))
(run '(assert!
(rule (last-pair (?y . ?z) ?x)
(last-pair ?z ?x))))
; In the next rule we operate on lists, so it is helpful to have this relationship's
; name in a list format.
(run '(assert!
(rule ((grandson) ?gf ?gs)
(grandson ?gf ?gs))))
(run '(assert!
(rule ((great . ?rel) ?x ?y)
(and (son ?x ?son)
(?rel ?son ?y)
(last-pair ?rel (grandson))))))
(run '(?relationship Adam Irad))
;((great grandson) adam irad)
(run '((great grandson) Adam ?x))
;((great grandson) adam irad)
(run '((great grandson) ?g ?ggs))
;((great grandson) mehujael jubal)
;((great grandson) irad lamech)
;((great grandson) mehujael jabal)
;((great grandson) enoch methushael)
;((great grandson) cain mehujael)
;((great grandson) adam irad)