in0 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. make "fact_base [
  2. [rec x]
  3. [
  4. if eq :x 0
  5. [return 1]
  6. [return mul :x rec :rec sub :x 1]
  7. ]
  8. ]
  9. make "fact_simple [
  10. [x]
  11. [return fact_base :fact_base :x]
  12. ]
  13. print fact_simple 5
  14. make "fact_nice [
  15. [rec]
  16. [
  17. make "g [
  18. [x]
  19. [
  20. if eq :x 0
  21. [return 1]
  22. [
  23. make "tmp rec :rec
  24. return mul :x tmp sub :x 1
  25. ]
  26. ]
  27. ]
  28. return :g
  29. ]
  30. ]
  31. make "fact_curry fact_nice :fact_nice
  32. print fact_curry 5
  33. make "fact_nicer [
  34. [rec]
  35. [
  36. make "g [
  37. [x]
  38. [
  39. if eq :x 0
  40. [return 1]
  41. [return mul :x rec sub :x 1]
  42. ]
  43. ]
  44. return :g
  45. ]
  46. ]
  47. make "z_comb [
  48. [g]
  49. [
  50. make "t [
  51. [r]
  52. [
  53. make "y [
  54. [yy]
  55. [
  56. make "tmp r :r
  57. return tmp :yy
  58. ]
  59. ]
  60. return g :y
  61. ]
  62. ]
  63. return t :t
  64. ]
  65. ]
  66. make "fact_z z_comb :fact_nicer
  67. print fact_z 5
  68. make "rev_func [
  69. [f]
  70. [
  71. [
  72. [a b]
  73. [f :b :a]
  74. ]
  75. ]
  76. ]
  77. make "rev_sub rev_func [[x y] [sub :x :y]]
  78. print rev_sub 2 5
  79. print rev_sub 26.5 10.3
  80. make "rev_ge rev_func [[x y] [or gt :x :y eq :x :y]]
  81. print rev_ge 3 7
  82. print rev_ge "abc "aBc
  83. print rev_ge 8 8
  84. make "rev_imply rev_func [[x y] [or not :x :y]]
  85. print rev_imply false false
  86. print rev_imply false true
  87. print rev_imply true false
  88. print rev_imply true true
  89. print "abcd12
  90. make "a 16
  91. print :a
  92. make "b "a
  93. print thing :b
  94. make "c mul add :a 13 :a
  95. print sub :c "6
  96. print div 12 5
  97. print mod 12 5
  98. make "d read
  99. 1234dd
  100. make "e print :d
  101. print :e
  102. make "l []
  103. make "q join :l "[
  104. print :q[0]
  105. print eq "] "\]
  106. make "t print [ \[1\]\\\] [1]]
  107. print islist :t[0]
  108. print islist :t[1]
  109. make "x "t
  110. make "y "x
  111. print :::y
  112. make "arr [ [ a b ] c ]
  113. print :arr[0]
  114. print :arr[1]
  115. print :arr[0][0]
  116. print :arr[0][1]
  117. make "arr[0][1] "d
  118. print :arr[0]
  119. print :arr[0][1]
  120. make "arr[1] [ add :a :d ]
  121. print :arr
  122. print arr 2 3
  123. make "arr[0][1] [ e [ f ] ]
  124. make "arr join :arr [ g [ h i ] ]
  125. print :arr[0][1]
  126. print :arr[0][1][0]
  127. print :arr[0][1][1][0]
  128. make "x 1
  129. print :arr[x:]
  130. print word "hello "world
  131. print word "hello true
  132. print word "hello -134.5
  133. print sentence 483 "dba
  134. print sentence sentence [ [ a b ] c ] [ d [ e f ] ] "g
  135. print list 483 "dba
  136. print list list [ [ a b ] c ] [ d [ e f ] ] "g
  137. print join [ 483 ] "dba
  138. print join join [ [ a b ] c ] [ d [ e f ] ] "g
  139. print first "hello
  140. print first butlast list list [ [ a b ] c ] [ d [ e f ] ] "g
  141. make "pow [[a b] [
  142. if lt :b 1 [
  143. return 1
  144. ] [
  145. make "r pow :a div sub :b mod :b 2 2
  146. make "r mul :r :r
  147. if mod :b 2 [
  148. return mul :r :a
  149. ] [
  150. return :r
  151. ]
  152. print :r
  153. ]
  154. ]]
  155. print pow 2 18
  156. print make "ts readlist
  157. [1 ] c 1 \\\\[2 3\\]
  158. print islist :ts[1]
  159. make "reverse_list [
  160. [list]
  161. [if isempty :list [] [join reverse_list butfirst :list first :list]]
  162. ]
  163. print reverse_list []
  164. print reverse_list [x y z]
  165. print reverse_list [12 345 6 78 9 0]
  166. print reverse_list [a b c d [e f] g]
  167. print reverse_list [h [i [j k]] l m n]
  168. make "fib_wrap [
  169. [x]
  170. [
  171. make "fib [
  172. [x]
  173. [
  174. if lt :x 2 [return 1] []
  175. add fib sub :x 1 fib sub :x 2
  176. ]
  177. ]
  178. fib :x
  179. ]
  180. ]
  181. print fib_wrap 0
  182. print fib_wrap 1
  183. print fib_wrap 2
  184. print fib_wrap 3
  185. print fib_wrap 4
  186. print fib_wrap 5
  187. print fib_wrap 6
  188. print fib_wrap 7
  189. print fib_wrap 8
  190. print fib_wrap 23
  191. make "f [[x] [
  192. make "g [[y] [return add :x :y]]
  193. return g 42
  194. ]]
  195. print f 233
  196. make "f1 [[x] [
  197. make "g1 [[y] [return add :x :y]]
  198. return :g1
  199. ]
  200. ]
  201. make "c1 f1 42
  202. make "c2 f1 24
  203. print c1 1
  204. print c2 2
  205. make "curry_two [[f x] [
  206. return [[y] [return f :x :y]]
  207. ]]
  208. make "f2 [[x y] [
  209. return add :x :y
  210. ]]
  211. make "f2p curry_two :f2 42
  212. print f2p 233
  213. make "fun [
  214. [x]
  215. [[[y] [make "x add :x :y]]]
  216. ]
  217. make "adder fun 5
  218. print adder 1
  219. print adder 2
  220. print adder 3
  221. make "prt [
  222. [a]
  223. [
  224. make "b [
  225. []
  226. [print :a]
  227. ]
  228. return :b
  229. ]
  230. ]
  231. make "c prt "hello
  232. c
  233. make "x 2
  234. print :x
  235. make "test [
  236. []
  237. [
  238. make "x 1
  239. export "x
  240. print :x
  241. ]
  242. ]
  243. test
  244. print :x
  245. print poall
  246. make "fun1 [
  247. [x]
  248. [add :x 10]
  249. ]
  250. print fun1 5
  251. make "fun2 [
  252. []
  253. [
  254. print fun1 5
  255. make "fun1 [
  256. [x]
  257. [add :x 100]
  258. ]
  259. print fun1 5
  260. export "fun1
  261. make "fun1 [
  262. [x]
  263. [add :x 1000]
  264. ]
  265. print fun1 5
  266. if eq fun1 5 1005 [return 0] []
  267. make "fun1 [
  268. [x]
  269. [add :x 10000]
  270. ]
  271. export "fun1
  272. print fun1 5
  273. return 1
  274. ]
  275. ]
  276. print fun2
  277. print fun1 5
  278. make "merge_sort [
  279. [a]
  280. [
  281. if isempty :a [
  282. return []
  283. ] []
  284. if isempty butfirst :a [
  285. return :a
  286. ] []
  287. make "split [
  288. [l]
  289. [
  290. if isempty :l [
  291. return [[] []]
  292. ] []
  293. if isempty butfirst :l [
  294. return list :l []
  295. ] []
  296. make "tmp split butlast butfirst :l
  297. return list sentence join [] first :l first :tmp join last :tmp last :l
  298. ]
  299. ]
  300. make "merge [
  301. [l r]
  302. [
  303. if or isempty :l isempty :r [
  304. return sentence :l :r
  305. ] []
  306. if lt first :l first :r [
  307. return sentence join [] first :l merge butfirst :l :r
  308. ] [
  309. return sentence join [] first :r merge :l butfirst :r
  310. ]
  311. ]
  312. ]
  313. make "tmp split :a
  314. return merge merge_sort first :tmp merge_sort last :tmp
  315. ]
  316. ]
  317. print merge_sort [4 6 1 8 3 0 7 9 5 2]