Реализация по принципу сверху-вниз
: решение задачи сводим к решению трёх подзадач.
(defun move (n from to spare)
  (cond ((= n 0)
         "Готово")
        (t
         (move (1- n) from spare to)
         (print "Перенести диск")
         (princ from)
         (princ " -> ")
         (princ to)
         (move (1- n) spare to from))))
(move 3 1 2 3)

Приложение с графическим интерфейсом, демонстрирующее процесс перекладывания
дисков в цвете
, для любой из платформ Windows, Linux или MacOS 
доступно для скачивания на сайте разработчика:
http://weitz.de/hanoi/.