View source with raw comments or as raw
    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).