comparison code/mike00.lm @ 14:ce68c8a607ee

Added a new file for experimenting with some helper functions
author Michael Pavone <pavone@retrodev.com>
date Fri, 25 Jul 2014 21:04:14 -0700
parents
children 89aa6d3165ee
comparison
equal deleted inserted replaced
13:451043a65ff7 14:ce68c8a607ee
1 #{
2 length <- :lst {
3 len <- []
4 while: { not: (lst isInteger?)} do: {
5 lst <- lst tail
6 len <- len + 1
7 }
8 len
9 }
10
11 reverse <- :lst {
12 new <- []
13 while: { not: (lst isInteger?)} do: {
14 new <- (lst value) | new
15 lst <- lst tail
16 }
17 new
18 }
19
20 split:at <- :lst :pos {
21 first <- []
22 i <- 0
23 while: { i < pos } do: {
24 first <- (lst value) | first
25 lst <- lst tail
26 i <- i + 1
27 }
28 #[(reverse: first) lst]
29 }
30
31 map <- :lst fun {
32 new <- []
33 while: { not: (lst isInteger?) } do: {
34 new <- (fun: (lst value)) | new
35 lst <- lst tail
36 }
37 reverse: new
38 }
39
40 makeTree <- :lst size {
41 ret <- 0
42 sub <- 0
43 half <- size / 2
44 if: size = 2 {
45 ret <- #[(lst value) ((lst tail) value)]
46 } else: {
47 if: size = 1 {
48 ret <- lst
49 } else: {
50 sub <- split: lst at: half
51 ret <- #[
52 (makeTree: (sub value) half)
53 (makeTree: (sub tail) size-half)
54 ]
55 }
56 }
57 ret
58 }
59
60 get:fromTree:size <- :idx :tree :size {
61 ret <- 0
62 half <- size / 2
63 if: size <= 2 {
64 if: idx = 0 {
65 ret <- tree value
66 } else: {
67 ret <- tree tail
68 }
69 } else: {
70 if: idx < half {
71 ret <- get: idx fromTree: (tree value) size: half
72 } else: {
73 ret <- get: idx-half fromTree: (tree tail) size: size-half
74 }
75 }
76 ret
77 }
78
79 height <- 0
80 width <- 0
81
82 main <- {
83 /* map <- initWorld value
84 height <- map length
85 width <- (map value) length
86 */
87
88 lst <- [1 2 3 4 5 6 7 8 9]
89 print: (length: lst)
90 print: (map: lst :el { el + 1 })
91 print: (split: lst at: (length: lst) / 2)
92 tree <- makeTree: lst (length: lst)
93 print: tree
94 }
95
96 }