home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / EFFO / pd6.lzh / TST / towers_of_hanoi.tst < prev    next >
Text File  |  1989-12-21  |  987b  |  50 lines

  1. .( Loading Towers of Hanoi benchmark...) cr
  2.  
  3. \ The classical Towers of Hanoi benchmark
  4. \
  5. \ From W.P. Salman, O. Tisserand and B. Toulout, FORTH, Macmillan
  6. \ pp. 120-121
  7.  
  8. variable moves
  9.  
  10. : copy ( x y z -- x y z x y z)
  11.   >r over over r@ rot rot r> ;
  12.  
  13. : dispose ( x y z -- )
  14.   drop drop drop ;
  15.  
  16. : edit ( d a n -- d a n)
  17.   copy drop swap ." From: " . ." to: " . cr ;
  18.  
  19. : prepare-call ( d a n -- d a n d i n-1)
  20.   copy rot rot over + 6 swap - rot 1- ;
  21.  
  22. : prepare-return ( d a n -- d a n i a n-1)
  23.   copy swap rot over + 6 swap - swap rot 1- ;
  24.  
  25. : verify-hanoi ( departure arrival number -- )
  26.   dup
  27.   if prepare-call recurse
  28.     edit
  29.     prepare-return recurse
  30.   then
  31.   dispose ;
  32.  
  33. : verify-towers-of-hanoi ( -- )
  34.   1 3 4 verify-hanoi ;
  35.  
  36. : hanoi ( departure arrival number -- )
  37.   dup
  38.   if prepare-call recurse
  39.     1 moves +!
  40.     prepare-return recurse
  41.   then
  42.   dispose ;
  43.  
  44. : towers-of-hanoi ( -- )
  45.   0 moves !
  46.   1 3 14 hanoi
  47.   moves @ 16383 = not abort" towers-of-hanoi: wrong result" ;
  48.  
  49. forth only
  50.