The person that wrote the Common Lisp version of hanoi at Hanoimania! did not have a firm grasp of Lisp. The use of eval is completely bogus. In any case, eval takes one argument, not three.

This is a better one that actually works:

(defun hanoi (n)
  (labels ((do-hanoi (n to from u)
	     (cond ((> n 0)
		    (do-hanoi (- n 1) u from to)
		    (format t "move ~D --> ~D~&" from to)
		    (do-hanoi (- n 1) to u from)))))
    (do-hanoi n 3 1 2)))

It produces this output:

cl-user(13): (hanoi 3)
move 1 --> 3
move 1 --> 2
move 3 --> 2
move 1 --> 3
move 2 --> 1
move 2 --> 3
move 1 --> 3
nil
cl-user(14):