| divert(-1) | |
| # move(from, to) | |
| define(`move', `Move one disk from `$1' to `$2'. | |
| ') | |
| # _hanoi (cnt, from, to, aux) | |
| define(`_hanoi', `ifelse(eval(`$1'<=1), 1, `move($2, $3)', | |
| `$0(decr($1), $2, $4, $3)move($2, $3)$0(decr($1), $4, $3, $2)')') | |
| # hanoi (cnt) | |
| define(`hanoi', `_$0(`$1', source, destination, auxilliary)') | |
| # traceon(`move', `_hanoi', `decr') | |
| divert`'dnl |