Advertisement
Guest User

overengineered fizzbuzz(bazz) with forth metaprogramming

a guest
Aug 3rd, 2015
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.92 KB | None | 0 0
  1. :noname ." Bazz" ;
  2. :noname ." Buzz" ;
  3. :noname ." Fizz" ;
  4. create responses , , ,
  5.  
  6. : divisibility>flags ( compilation: mn..m1 n -- ; run-time: n -- n )
  7. 0 postpone literal
  8. 0 do
  9. postpone over
  10. postpone literal postpone mod postpone 0= postpone if
  11. 1 i lshift postpone literal
  12. postpone +
  13. postpone then
  14. loop
  15. ;
  16.  
  17. : flags>messages ( compilation: n addr -- ; run-time n -- )
  18. { addr }
  19. 0 do
  20. postpone dup
  21. 1 i lshift postpone literal
  22. postpone and postpone if
  23. addr i cells + @ postpone literal postpone execute
  24. postpone then
  25. loop
  26. ;
  27.  
  28. : fizzbuzz ( n -- )
  29. 1+ 1 do
  30. cr
  31. i [ 5 3 2 divisibility>flags ] dup 0= if
  32. drop i .
  33. else
  34. [ 2 responses flags>messages ]
  35. then
  36. loop
  37. ;
  38.  
  39. : fizzbuzzbazz ( n -- )
  40. 1+ 1 do
  41. cr
  42. i [ 7 5 3 3 divisibility>flags ] dup 0= if
  43. drop i .
  44. else
  45. [ 3 responses flags>messages ]
  46. then
  47. loop
  48. ;
  49.  
  50. \ examlpes:
  51. \ 100 fizzbuzz
  52. \ 105 fizzbuzzbazz
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement