1 (defun move-to (col row)
2 (patom "\033[" row ";" col "H" nil)
9 (setq stack '("*" "**" "***" "****" "*****" "******" "*******"))
13 (defun display-string (x y str)
18 (defun display-stack (x y stack)
20 (display-string x y (car stack))
21 (display-stack x (1+ y) (cdr stack)))))
24 (defun clear-stack (x y)
28 (clear-stack x (1- y))
35 (cond (list (1+ (length (cdr list))))
40 (defun stack-pos (y stack)
44 (defun display-stacks (x y stacks)
47 (display-stack x (stack-pos y (car stacks)) (car stacks))
48 (display-stacks (+ x 20) y (cdr stacks)))
54 (display-stacks 0 20 stacks)
60 (cond (l (1+ (length (cdr l)))) (0))
63 (defun reset-stacks ()
64 (setq stacks (list stack nil nil))
75 (cond ((= n 0) (car list))
76 ((nth (cdr list) (1- n)))
80 (defun replace (list pos member)
81 (cond ((= pos 0) (cons member (cdr list)))
82 ((cons (car list) (replace (cdr list) (1- pos) member)))
86 (defun move-piece (from to)
87 (let ((from-stack (nth stacks from))
88 (to-stack (nth stacks to))
89 (piece (car from-stack)))
90 (setq from-stack (cdr from-stack))
91 (setq to-stack (cons piece to-stack))
92 (setq stacks (replace stacks from from-stack))
93 (setq stacks (replace stacks to to-stack))
99 (defun _hanoi (n from to use)
107 (_hanoi (1- n) from use to)
108 (_hanoi 1 from to use)
109 (_hanoi (1- n) use to from)
116 (setq len (reset-stacks))