sol(A, B, _, 1, [A->B]) :- !. sol(A, B, C, N, L) :- % T(N) N > 1, N1 is N - 1, sol(A, C, B, N1, L1), % T(N - 1) sol(A, B, C, 1, L2), % 1 sol(C, B, A, N1, L3), % T(N - 1) append([L1,L2, L3], L). printlist([]). printlist([(A->B) | T]) :- format("Move top disk from ~w to ~w~n", [A, B]), printlist(T). %write("Move top disk from "), write(A), move(N, A, B, C) :- sol(A, B, C, N, L), printlist(L).