12345678910111213141516171819 |
- % Generate
- { move(D,P,T) : disk(D), peg(P) } = 1 :- moves(M), T = 1..M.
- % Define
- move(D,T) :- move(D,_,T).
- on(D,P,0) :- init_on(D,P).
- on(D,P,T) :- move(D,P,T).
- on(D,P,T+1) :- on(D,P,T), not move(D,T+1), not moves(T).
- blocked(D-1,P,T+1) :- on(D,P,T), not moves(T).
- blocked(D-1,P,T) :- blocked(D,P,T), disk(D).
- % Test
- :- move(D,P,T), blocked(D-1,P,T).
- :- move(D,T), on(D,P,T-1), blocked(D,P,T).
- :- goal_on(D,P), not on(D,P,M), moves(M).
- :- { on(D,P,T) } != 1, disk(D), moves(M), T = 1..M.
- % Display
- #show move/3.
|