.( Loading Towers of Hanoi benchmark...) cr \ The classical Towers of Hanoi benchmark \ From W.P. Salman, O. Tisserand and B. Toulout, FORTH, Macmillan \ pp. 120-121 variable moves : copy ( x y z -- x y z x y z) >r 2dup r@ -rot r> ; : dispose ( x y z -- ) 2drop drop ; : edit ( d a n -- d a n) copy drop swap ." From: " . ." to: " . cr ; : prepare-call ( d a n -- d a n d i n-1) copy -rot over + 6 swap - rot 1- ; : prepare-return ( d a n -- d a n i a n-1) copy swap rot over + 6 swap - swap rot 1- ; : verify-hanoi ( departure arrival number -- ) dup if prepare-call recurse edit prepare-return recurse then dispose ; : verify-towers ( -- ) 1 3 4 verify-hanoi ; : hanoi ( departure arrival number -- ) dup if prepare-call recurse 1 moves +! prepare-return recurse then dispose ; : towers-of-hanoi ( -- ) 0 moves ! 1 3 14 hanoi moves @ 16383 0= abort" towers-of-hanoi: wrong result" ; towers-of-hanoi verify-towers