Guest User

Untitled

a guest
Jul 20th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. var sys = require("sys");
  2.  
  3. set = function(a) {
  4. return function() {
  5. return a.length
  6. ? a.shift()
  7. : null
  8. }
  9. }
  10. exports.set = set;
  11.  
  12. zipWith = function(a) {
  13. return function(itA) {
  14. return function(itB) {
  15. return map(function(n) {
  16. return a(n)(itB());
  17. })(itA)
  18. }
  19. }
  20. }
  21. exports.zipWith = zipWith;
  22.  
  23. foldr = function(a) {
  24. return function(b) {
  25. return function(it) {
  26. return function() {
  27. var n = it();
  28. return null === n
  29. ? b
  30. : a(n)(arguments.callee())
  31. }()
  32. }
  33. }
  34. }
  35. exports.foldr = foldr;
  36.  
  37. quot = function(a) {
  38. return function(b) {
  39. return b == null ? parseInt(a) : parseInt(parseInt(a) / parseInt(b))
  40. }
  41. }
  42. exports.quot = quot;
  43.  
  44. sum = function(a) {
  45. return function(b) {
  46. return b == null ? a : a + b
  47. }
  48. }
  49. exports.sum = sum;
  50.  
  51. scale = function(a) {
  52. return function(b) {
  53. return b == null
  54. ? parseInt(a)
  55. : parseInt(a) * parseInt(b)
  56. }
  57. }
  58. exports.scale = scale;
  59.  
  60. fib = function() {
  61. var n = 0;
  62. var f = memoize(function(n) {
  63. return n == 0
  64. ? 0
  65. : (n == 1
  66. ? 1
  67. : f(n-1) + f(n-2))
  68. });
  69. return function() {
  70. return f(n++)
  71. }
  72. }
  73. exports.fib = fib;
  74.  
  75. nat = function() {
  76. var n = 0
  77. return function() {
  78. return n++
  79. }
  80. }
  81. exports.nat = nat;
  82.  
  83. map = function(a) {
  84. return function(it) {
  85. return function() {
  86. var n = it();
  87. return null === n
  88. ? null
  89. : a(n)
  90. }
  91. }
  92. }
  93. exports.map = map;
  94.  
  95. takeWhile = function(pred) {
  96. return function(it) {
  97. return function() {
  98. var n = it();
  99. return pred(n)
  100. ? n
  101. : null
  102. }
  103. }
  104. }
  105. exports.takeWhile = takeWhile;
  106.  
  107. take = function(n) {
  108. return function(it) {
  109. return function() {
  110. return n-- > 0
  111. ? it()
  112. : null
  113. }
  114. }
  115. }
  116. exports.take = take;
  117.  
  118. filter = function(predicate) {
  119. return function(it) {
  120. return function() {
  121. var n = it();
  122. return null === n
  123. ? null
  124. : (predicate(n)
  125. ? n
  126. : arguments.callee())
  127. }
  128. }
  129. }
  130. exports.filter = filter;
  131.  
  132. isMultipleOf = function(n) {
  133. return function(m) {
  134. return m % n === 0;
  135. }
  136. }
  137. exports.isMultipleOf = isMultipleOf;
  138.  
  139. memoize = function(f) {
  140. var cache = [];
  141. return function(n) {
  142. return typeof(cache[n]) === 'undefined'
  143. ? cache[n] = f(n)
  144. : cache[n]
  145. }
  146. }
  147. exports.memoize = memoize;
  148.  
  149. and = function(a) {
  150. return function(b) {
  151. return null === b
  152. ? a
  153. : a && b;
  154. }
  155. }
  156. exports.and = and;
  157.  
  158. tail = function(it) {
  159. var n = 0;
  160. return function() {
  161. var m = it();
  162. return n++ == 0
  163. ? arguments.callee()
  164. : m
  165. }
  166. }
  167. exports.tail = tail;
  168.  
  169. isFactor = function(n) {
  170. return function(m) {
  171. return n % m == 0
  172. }
  173. }
  174. exports.isFactor = isFactor;
  175.  
  176. isPrime = function(n) {
  177. return (foldr
  178. (and)
  179. (null)
  180. (map
  181. (function(m) { return n % m != 0 } )
  182. (tail
  183. (tail
  184. (take
  185. (n-1)
  186. (nat()))))))
  187. }
  188. exports.isPrime = isPrime;
Add Comment
Please, Sign In to add comment