Towers of Hanoi: Difference between revisions

→‎[[Forth]]: make portable, example without locals
(Added Forth example (from comp.lang.forth))
(→‎[[Forth]]: make portable, example without locals)
Line 70:
==[[Forth]]==
[[Category:Forth]]
With locals:
 
CREATE peg1 ," left "
CREATE peg2 ," middle "
CREATE peg3 ," right "
: .$ COUNT TYPE ;
: MOVE-DISK
LOCALS| via to from n |
n 1 =
n 1 = IF CR ." Move disk from " from .$ ." to " to .$
ELSEIF n 1-CR ." Move disk from via" from .$ ." to " to RECURSE.$
1 ELSE n 1- from via to via RECURSE
n 1- via to from to via RECURSE
n 1- via to from RECURSE
ENDIFTHEN ;
 
Without locals, executable pegs:
 
: left ." left" ;
: right ." right" ;
: middle ." middle" ;
: print ( t f -- )
n 1 = IF CR ." Move disk from " fromexecute .$" ." to " toexecute .$ ;
: move-disk ( v t f n -- v t f )
dup 1 = if drop 2dup print exit then
1- >R
rot swap R@ ( t v f n-1 ) recurse
rot swap 2dup print
swap rot R> ( f t v n-1 ) recurse
swap rot ;
: hanoi ( n -- )
1 max >R ['] right ['] middle ['] left R> move-disk drop drop drop ;
 
==[[Java]]==
Anonymous user