1 (defun move-to (col row)
2 (patom "\033[" row ";" col "H" nil)
9 (setq stack '("*" "**" "***" "****" "*****" "******" "*******"))
11 (setq top (+ (length stack) 3))
15 (defun display-string (x y str)
20 (defun display-stack (x y clear stack)
23 (display-string x y (car stack))
24 (display-stack x (1+ y) 0 (cdr stack))
30 (display-string x y " ")
31 (display-stack x (1+ y) (1- clear) stack)
38 (cond (list (1+ (length (cdr list))))
43 (defun stack-pos (y stack)
47 (defun display-stacks (x y stacks)
49 (display-stack x 0 (stack-pos y (car stacks)) (car stacks))
50 (display-stacks (+ x 20) y (cdr stacks)))
56 (display-stacks 0 top stacks)
62 (cond (l (1+ (length (cdr l)))) (0))
65 (defun reset-stacks ()
66 (setq stacks (list stack nil nil))
77 (cond ((= n 0) (car list))
78 ((nth (cdr list) (1- n)))
82 (defun replace (list pos member)
83 (cond ((= pos 0) (cons member (cdr list)))
84 ((cons (car list) (replace (cdr list) (1- pos) member)))
88 (defun move-piece (from to)
89 (let ((from-stack (nth stacks from))
90 (to-stack (nth stacks to))
91 (piece (car from-stack)))
92 (setq from-stack (cdr from-stack))
93 (setq to-stack (cons piece to-stack))
94 (setq stacks (replace stacks from from-stack))
95 (setq stacks (replace stacks to to-stack))
101 (defun _hanoi (n from to use)
109 (_hanoi (1- n) from use to)
110 (_hanoi 1 from to use)
111 (_hanoi (1- n) use to from)
118 (setq len (reset-stacks))