View source with formatted comments or as raw
    5query(T,L) :-
    6    T .<. 50, hanoi(T,L).
    7
    8size(5).
    9stack(Stack) :- size(N), gen_list(1,N,Stack).
   10
   11:- use_package(clpq).   12
   13hanoi(T,List) :-
   14    stack(Stack),
   15    holds(T,st([],[],Stack),List).
   16
   17init(st(Stack,[],[])) :-
   18    stack(Stack).
   19
   20holds(0,St,[St-0]) :-
   21    init(St).
   22holds(T1, St1,[St1-T1|Prev]) :-
   23    T1 .>. 0,
   24    T1 .=. T0 + 1,
   25    holds(T0, St0, Prev),
   26    trans(St0, St1),
   27    \+ member(St1-T,Prev).
   28
   29trans(st(A0,B0,C0), st(A1,B1,C1)) :-
   30    trans_(A0,A1,B0,B1,C0,C1).
   31trans(st(A0,B0,C0), st(A1,B1,C1)) :-
   32    trans_(B0,B1,C0,C1,A0,A1).
   33trans(st(A0,B0,C0), st(A1,B1,C1)) :-
   34    trans_(C0,C1,A0,A1,B0,B1).
   35
   36trans_([A|As],As,B,[A|B],C,C) :-
   37    not_invalid(A,B).
   38trans_([A|As],As,B,B,C,[A|C]) :-
   39    not_invalid(A,C).
   40
   41% invalid(E,[O|_]) :-
   42%       E .>. O.
   43
   44not_invalid(_,[]).
   45not_invalid(E,[O|_]) :-
   46    E .<. O.
   47
   48gen_list(N,N,[N]).
   49gen_list(I,N,[I|L]) :-
   50    I < N,
   51    I1 is I + 1,
   52    gen_list(I1,N,L)