1:- module(hanoi_clp,_). 2 3 4 5 6 7 8 9 10 11 12% % % Move N disks in T moves. 13% % hanoi(N, T) :- 14% % moven(N, 0, T, 1, 2, 3). 15 16% % % Move N disks from peg A to peg B using peg C. Assign move numbers. 17% % moven(N, Ti, To, A, B, C) :- 18% % N > 1, 19% % N1 is N - 1, 20% % moven(N1, Ti, T2, A, C, B), 21% % T3 is T2 + 1, 22% % move(T3, A, B), 23% % moven(N1, T3, To, C, B, A). 24% % moven(1, Ti, To, A, B, _) :- 25% % To is Ti + 1, 26% % move(To, A, B). 27 28% % % move T: move disk from P1 to P2. 29% % % any move may or may not be selected. 30% % move(T, P1, P2) :- 31% % not negmove(T, P1, P2). 32% % negmove(T, P1, P2) :- 33% % not move(T, P1, P2). 34 35% :- use_package(tabling). 36% :- use_package(t_clpq). 37 38% :- table move/5. 39 40%#table move/5. 41 42move(1,_,_,_,1). 43% :- 44% write('Move top disk from '), 45% write(X), 46% write(' to '), 47% write(Y), 48% nl. 49move(N,X,Y,Z,Steps) :- 50 Steps .=. S1 + S2 + S3, 51 N > 1, 52 M is N - 1, 53 move(M,X,Z,Y,S1), 54 move(1,X,Y,_,S2), 55 move(M,Z,Y,X,S3). 56 57% q(S,T) :- 58% statistics(runtime,_), move(15,l,r,c,S), statistics(runtime, [_|T]). 59 60% ?- hanoi(4, T).