in0 6.0 KB

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