View source with raw comments or as raw
    1% Move N disks in T moves.
    2hanoi(N, T) :-
    3    moven(N, 0, T, 1, 2, 3).
    4
    5% Move N disks from peg A to peg B using peg C. Assign move numbers.
    6moven(N, Ti, To, A, B, C) :-
    7    N > 1,
    8    N1 is N - 1,
    9    moven(N1, Ti, T2, A, C, B),
   10    T3 is T2 + 1,
   11    move(T3, A, B),
   12    moven(N1, T3, To, C, B, A).
   13moven(1, Ti, To, A, B, _) :-
   14    To is Ti + 1,
   15    move(To, A, B).
   16
   17% move T: move disk from P1 to P2.
   18% any move may or may not be selected.
   19move(T, P1, P2) :-
   20    not negmove(T, P1, P2).
   21
   22negmove(T, P1, P2) :-
   23    not move(T, P1, P2).
   24
   25?- hanoi(7, T).