hanoi(N) :- hanoitmp(N, 1, 2, 3). 

hanoitmp(0, _, _, _) :- !.
hanoitmp(N, X, Y, Z) :- Ntmp is N-1,
hanoitmp(Ntmp, X,Z,Y),przenies(X,Y),hanoitmp(Ntmp,Z,Y,X).

przenies(Z1,Z2) :- writeln([przenies, dysk, z, kijka, Z1, na, Z2]).

Test programu dla 5 krążków:

hanoi(5).

SWI-Prolog do pobrania tutaj:
http://www.swi-prolog.org/