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