Guest User

Untitled

a guest
Jan 21st, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.87 KB | None | 0 0
  1. #!/Applications/Rakudo/bin/perl6
  2.  
  3. use Test;
  4.  
  5. multi infix:<↑> ( Int:D \n, Int:D \m --> Int:D )
  6. is equiv(&infix:<**>)
  7. is assoc<right>
  8. { n ** m }
  9.  
  10. proto infix:<↑↑> ( Int:D \n, Int:D \m --> Int:D )
  11. is tighter(&infix:<↑>)
  12. is assoc<right>
  13. { * }
  14. multi infix:<↑↑> ( \n, 0 ) { 1 }
  15. multi infix:<↑↑> ( \n, 1 ) { n }
  16. multi infix:<↑↑> ( \n, \m ) { [↑] n xx m }
  17.  
  18. proto infix:<↑↑↑> ( Int:D \n, Int:D \m --> Int:D )
  19. is tighter(&infix:<↑↑>)
  20. is assoc<right>
  21. { * }
  22. multi infix:<↑↑↑> ( \n, 0 ) { 1 }
  23. multi infix:<↑↑↑> ( \n, 1 ) { n }
  24. multi infix:<↑↑↑> ( \n, \m ) { [↑↑] n xx m }
  25.  
  26.  
  27. multi infix:<↑⁰> ( Int:D \n, Int:D \m --> Int:D ) is assoc<right> { 1 }
  28. multi infix:<↑²> ( Int:D \n, 0 --> Int:D ) is assoc<right> { 1 }
  29. multi infix:<↑²> ( Int:D \n, Int:D \m --> Int:D ) is assoc<right> {
  30. [↑] n xx m
  31. }
  32. multi infix:<↑³> ( Int:D \n, 0 --> Int:D ) is assoc<right> { 1 }
  33. multi infix:<↑³> ( Int:D \n, Int:D \m --> Int:D ) is assoc<right> {
  34. [↑↑] n xx m
  35. }
  36.  
  37. # tetration notation
  38. multi prefix:<⁰> ( Int:D \m --> Int:D ) { 1 }
  39. multi prefix:<²> ( Int:D \m --> Int:D ) { m ↑↑ 2 }
  40. multi prefix:<³> ( Int:D \m --> Int:D ) { m ↑↑ 3 }
  41. multi prefix:<⁴> ( Int:D \m --> Int:D ) { m ↑↑ 4 }
  42.  
  43. # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
  44. # Now a bunch of tests
  45. is 2↑0, 1, '2↑0 == 1';
  46. is 2↑1, 2, '2↑1 == 2';
  47. is 2↑2, 4, '2↑2 == 4';
  48. is 2↑3, 8, '2↑3 == 8';
  49. is 2↑4, 16, '2↑4 == 16';
  50.  
  51. is 2↑2↑2, 16, '2↑2↑2 == 16';
  52. is 2↑2↑2↑2, 65536, '2↑2↑2↑2 == 65536';
  53.  
  54. is 2↑⁰0, 1, '2↑⁰0 == 1';
  55.  
  56. is 2↑2↑2, 16, '2↑2↑2 == 16';
  57. is 2↑2↑2↑2, 65536, '2↑2↑2↑2 == 65536';
  58.  
  59. is 2↑↑0, 1, '2↑↑0 == 1';
  60. is 2↑↑1, 2, '2↑↑1 == 2';
  61. is 2↑↑2, 4, '2↑↑2 == 4';
  62. is 2↑↑3, 16, '2↑↑3 == 16';
  63. is 2↑↑4, 65536, '2↑↑4 == 65536';
  64.  
  65. is ²2, 2↑↑2, '²2 == 4';
  66.  
  67. is 2↑²4, 65536, '2↑²4 == 65536';
  68. is ⁴2, 2↑↑4, '⁴2 == 65536';
  69. is (2↑↑2)↑↑2, 4↑↑2, '(2↑↑2)↑↑2 == 4↑↑2';
  70. is ²(²2), (2↑↑2)↑↑2, '²(²2) == 256';
  71.  
  72.  
  73. is 3↑↑2, 27, '3↑↑2 == 27';
  74. is 3↑²2, 27, '3↑²2 == 27';
  75. is ²3, 27, '²3 == 27';
  76.  
  77. is 3↑↑3, 7625597484987, '3↑↑3 == 7625597484987';
  78. is 3↑²3, 7625597484987, '3↑²3 == 7625597484987';
  79. is ³3, 7625597484987, '³3 == 7625597484987';
  80.  
  81. is 4↑↑3, 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096,
  82. '4↑↑3 == 1.34078e154';
  83. is 4↑²3, 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096,
  84. '4↑²3 == 1.34078e154';
  85.  
  86. is 2↑↑↑3, 65536, '2↑↑↑3 == 65536';
  87. is 2↑³3, 65536, '2↑³3 == 65536';
Add Comment
Please, Sign In to add comment