/
hanoi.log
85 lines (77 loc) · 2.16 KB
/
hanoi.log
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
>>> #enum disk: tiny | small | big | huge.
--> describe(disk(1), tiny).
disk(disk(1)).
disk(disk(1),1).
tiny(disk(1)).
describe(disk(2), small).
disk(disk(2)).
disk(disk(2),2).
small(disk(2)).
describe(disk(3), big).
disk(disk(3)).
disk(disk(3),3).
big(disk(3)).
describe(disk(4), huge).
disk(disk(4)).
disk(disk(4),4).
huge(disk(4)).
understood.
>>> #enum peg: left | middle | right.
--> describe(peg(1), left).
peg(peg(1)).
peg(peg(1),1).
left(peg(1)).
describe(peg(2), middle).
peg(peg(2)).
peg(peg(2),2).
middle(peg(2)).
describe(peg(3), right).
peg(peg(3)).
peg(peg(3),3).
right(peg(3)).
understood.
>>> #fluent on(A,B).
--> on(MuA,MuB) :- holds(on(MuA,MuB)).
understood.
>>> #fluent on_same(D,E) :- on(D,P), on(E,P).
--> on_same(MuD,MuE) :- holds(on_same(MuD,MuE)).
holds(on_same(MuD,MuE),Time) :- holds(on(MuD,MuP),Time), holds(on(MuE,MuP),Time).
understood.
>>>
>>> small(disk.I, disk.(>I)).
--> small(A,C) :- disk(A,MuI), disk(C,B), B > MuI.
understood.
>>>
>>> init: on(disk, left peg).
--> init(on(A,B)) :- disk(A), left(B), peg(B).
understood.
>>>
>>> move(disk D, peg P) :: action demands_not.on(disk small.D, P) demands_not.on_same(D, disk small.D) deletes.on(D, peg) adds.on(D, P) costs.1.
--> action(move(A,B)) :- disk(A), A = MuD, peg(B), B = MuP.
demands_not(move(A,B),on(C,MuP)) :- disk(C), small(C,MuD), disk(A), A = MuD, peg(B), B = MuP.
demands_not(move(A,B),on_same(MuD,D)) :- disk(D), small(D,MuD), disk(A), A = MuD, peg(B), B = MuP.
deletes(move(A,B),on(MuD,E)) :- peg(E), disk(A), A = MuD, peg(B), B = MuP.
adds(move(A,B),on(MuD,MuP)) :- disk(A), A = MuD, peg(B), B = MuP.
costs(move(A,B),1) :- disk(A), A = MuD, peg(B), B = MuP.
understood.
>>>
>>> on(disk, right peg)!
--> goal(on(A,B)) :- disk(A), right(B), peg(B).
cost: 15.
move(tiny, middle)!
move(small, right)!
move(tiny, right)!
move(big, middle)!
move(tiny, left)!
move(small, middle)!
move(tiny, middle)!
move(huge, right)!
move(tiny, right)!
move(small, left)!
move(tiny, left)!
move(big, right)!
move(tiny, middle)!
move(small, right)!
move(tiny, right)!
>>> thanks.
YOU'RE WELCOME!