1 | ? | start(pegs(P1,[],[])) :- list(1,8,P1). % Hanoi with 3 pegs and 8 Discs |
2 | | trans(move12,pegs([H|A],B,C),pegs(A,[H|B],C)) :- ok(B,H). |
3 | | trans(move13,pegs([H|A],B,C),pegs(A,B,[H|C])) :- ok(C,H). |
4 | | trans(move21,pegs(A,[H|B],C),pegs([H|A],B,C)) :- ok(A,H). |
5 | | trans(move23,pegs(A,[H|B],C),pegs(A,B,[H|C])) :- ok(C,H). |
6 | | trans(move31,pegs(A,B,[H|C]),pegs([H|A],B,C)) :- ok(A,H). |
7 | | trans(move32,pegs(A,B,[H|C]),pegs(A,[H|B],C)) :- ok(B,H). |
8 | | |
9 | | ok([],_). % we can move any disc on an empty peg |
10 | | ok([H|_],Disc) :- Disc < H. |
11 | | |
12 | | list(N,N,[N]). |
13 | ? | list(N,M,[N|T]) :- N<M, N1 is N+1, list(N1,M,T). |
14 | | |
15 | | prop(X,X). |
16 | | prop(pegs([],[],_),unsafe). % use model checker to find solution |
17 | | prop(pegs([],_,[]),unsafe). |