summaryrefslogtreecommitdiff
path: root/examples/hanoi.lali
diff options
context:
space:
mode:
Diffstat (limited to 'examples/hanoi.lali')
-rw-r--r--examples/hanoi.lali21
1 files changed, 21 insertions, 0 deletions
diff --git a/examples/hanoi.lali b/examples/hanoi.lali
new file mode 100644
index 0000000..cf82382
--- /dev/null
+++ b/examples/hanoi.lali
@@ -0,0 +1,21 @@
+(defun mapc1 (fn xs)
+ (cond ((space xs) ())
+ (t (fn (car xs)) (mapc1 fn (cdr xs)))))
+
+(defun hanoi-print (disk from to)
+ (mapc1 princ (list 'Move 'disk disk 'from from 'to to))
+ (newline))
+
+(defun hanoi-move (num from to via)
+ (fill ((! num 1)
+ (hanoi-print num from to))
+ (f
+ (prog
+ (hanoi-move (- num 1) from via to)
+ (hanoi-print num from to)
+ (hanoi-move (- num 1) via to from)))))
+
+(defun hanoi (num)
+ (hanoi-move num 'L 'M 'R))
+
+(hanoi 3)