comparison code/mike00.lm @ 25:ec0b74f4f2d9

Merge
author William Morgan <billjunk@mrgn.org>
date Fri, 25 Jul 2014 22:52:52 -0700
parents edc89d9c9e10
children abd8ceef0dd8
comparison
equal deleted inserted replaced
24:37158acf31e5 25:ec0b74f4f2d9
35 lst <- lst tail 35 lst <- lst tail
36 } 36 }
37 reverse: new 37 reverse: new
38 } 38 }
39 39
40 makeTree <- :lst size { 40 fold:with <- :lst acc :fun {
41 while: { not: (lst isInteger?) } do: {
42 acc <- fun: acc (lst value)
43 lst <- lst tail
44 }
45 acc
46 }
47
48 filter <- :lst pred {
49 new <- []
50 while: { not: (lst isInteger?) } do: {
51 if: (pred: (lst value)) {
52 new <- (lst value) | new
53 } else: {}
54 lst <- lst tail
55 }
56 reverse: new
57 }
58
59 makeTree:size <- :lst :size {
41 ret <- 0 60 ret <- 0
42 sub <- 0 61 sub <- 0
43 half <- size / 2 62 half <- size / 2
44 if: size = 2 { 63 if: size = 2 {
45 ret <- #[(lst value) ((lst tail) value)] 64 ret <- #[(lst value) ((lst tail) value)]
47 if: size = 1 { 66 if: size = 1 {
48 ret <- lst 67 ret <- lst
49 } else: { 68 } else: {
50 sub <- split: lst at: half 69 sub <- split: lst at: half
51 ret <- #[ 70 ret <- #[
52 (makeTree: (sub value) half) 71 (makeTree: (sub value) size: half)
53 (makeTree: (sub tail) size-half) 72 (makeTree: (sub tail) size: size-half)
54 ] 73 ]
55 } 74 }
56 } 75 }
57 ret 76 ret
58 } 77 }
59 78
79 makeTree <- :lst {
80 size <- lst length
81 #[size (makeTree: lst size: size)]
82 }
83
60 get:fromTree:size <- :idx :tree :size { 84 get:fromTree:size <- :idx :tree :size {
85 print: #[1 tree size]
61 ret <- 0 86 ret <- 0
62 half <- size / 2 87 half <- size / 2
63 if: size <= 2 { 88 if: size <= 2 {
64 if: idx = 0 { 89 if: idx = 0 {
65 ret <- tree value 90 ret <- tree value
74 } 99 }
75 } 100 }
76 ret 101 ret
77 } 102 }
78 103
104 get:fromTree <- :idx :tree {
105 size <- tree value
106 print: #[0 size]
107 get: idx fromTree: (tree tail) size: size
108 }
109
110 treeMap:size <- :tree fun :size {
111 ret <- 0
112 half <- size / 2
113 if: size = 2 {
114 ret <- #[(fun: (tree value)) (fun: (tree tail))]
115 } else: {
116 if: size = 1 {
117 ret <- #[(fun: (tree value)) 0]
118 } else: {
119 ret <- #[
120 (treeMap: (tree value) fun size: half)
121 (treeMap: (tree tail) fun size: size-half)
122 ]
123 }
124 }
125 ret
126 }
127
128 treeMap <- :tree fun {
129 #[(tree value) (treeMap: (tree tail) fun size: (tree value))]
130 }
131
132 tree:size:update:with <- :tree :size :idx :fun {
133 ret <- 0
134 half <- size / 2
135 if: size = 2 {
136 if: idx = 0 {
137 ret <- #[(fun: (tree value)) (tree tail)]
138 } else: {
139 ret <- #[(tree value) (fun: (tree tail))]
140 }
141 } else: {
142 if: size = 1 {
143 ret <- #[(fun: (tree value)) 0]
144 } else: {
145 if: (idx < half) {
146 ret <- #[
147 (tree: (tree value) size: half update: idx with: fun)
148 (tree tail)
149 ]
150 } else: {
151 ret <- #[
152 (tree value)
153 (tree: (tree tail) size: size-half update: idx-half with: fun)
154 ]
155 }
156 }
157 }
158 ret
159 }
160
161 tree:update:with <- :tree :idx :fun {
162 #[(tree value) (tree: (tree tail) size: (tree value) update: idx with: fun)]
163 }
164
165 tree:set:to <- :tree :idx :val {
166 tree: tree update: idx with: :el { val }
167 }
168
79 height <- 0 169 height <- 0
80 width <- 0 170 width <- 0
81 171
82 main <- { 172 main <- {
83 /* map <- initWorld value 173 /* map <- initWorld value
87 177
88 lst <- [1 2 3 4 5 6 7 8 9] 178 lst <- [1 2 3 4 5 6 7 8 9]
89 print: (length: lst) 179 print: (length: lst)
90 print: (map: lst :el { el + 1 }) 180 print: (map: lst :el { el + 1 })
91 print: (split: lst at: (length: lst) / 2) 181 print: (split: lst at: (length: lst) / 2)
92 tree <- makeTree: lst (length: lst) 182 tree <- makeTree: lst
93 print: tree 183 print: tree
184 print: (get: 0 fromTree: tree)
185 print: (get: 6 fromTree: tree)
186 print: (get: 8 fromTree: tree)
187 print: (treeMap: tree :el { el + 1 })
188 print: (tree: tree set: 0 to: 42)
189 print: (tree: tree set: 6 to: 42)
190 print: (tree: tree set: 8 to: 42)
191 print: (fold: lst 0 with: :acc el { acc + el })
192 print: (filter: lst :el { el > 4 })
193 print: (tree: tree update: 8 with: :el { el + 29 })
94 } 194 }
95 195
96 } 196 }