1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
// Tower of Hanoi Puzzle
// Rules
hanoi(return, source, target, aux) >< Z =>
// Erase the source, target and aux
source ~ Eraser,
target ~ Eraser,
aux ~ Eraser,
// result
return~[];
hanoi(return, source, target, aux) >< S(n) =>
// Duplicate the source, target and aux
source ~ Dup(src1, Dup(src2, src3)),
target ~ Dup(tgt1, Dup(tgt2, tgt3)),
aux ~ Dup(aux1, aux2),
// recursive applications
n ~ Dup(nn1, Dup(nn2, nn3)),
hanoi(ret1, src1, aux1, tgt1)~nn1,
hanoi(ret2, aux2, tgt2, src2)~nn2,
// result
return << Append(ret1, (nn3,src3,tgt3):ret2);
// Net
hanoi(result, A, C, B) ~ S(S(S(Z)));
result;
|