Mercurial > repos > icfp2014
comparison code/mike00.lm @ 22:edc89d9c9e10
Added tree:update:with function. Reimplemented tree:set:to with tree:update:with
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 25 Jul 2014 22:30:56 -0700 |
parents | 5a27dd6f03cd |
children | abd8ceef0dd8 |
comparison
equal
deleted
inserted
replaced
21:5a27dd6f03cd | 22:edc89d9c9e10 |
---|---|
127 | 127 |
128 treeMap <- :tree fun { | 128 treeMap <- :tree fun { |
129 #[(tree value) (treeMap: (tree tail) fun size: (tree value))] | 129 #[(tree value) (treeMap: (tree tail) fun size: (tree value))] |
130 } | 130 } |
131 | 131 |
132 tree:size:set:to <- :tree :size :idx :val { | 132 tree:size:update:with <- :tree :size :idx :fun { |
133 ret <- 0 | 133 ret <- 0 |
134 half <- size / 2 | 134 half <- size / 2 |
135 if: size = 2 { | 135 if: size = 2 { |
136 if: idx = 0 { | 136 if: idx = 0 { |
137 ret <- #[val (tree tail)] | 137 ret <- #[(fun: (tree value)) (tree tail)] |
138 } else: { | 138 } else: { |
139 ret <- #[(tree value) val] | 139 ret <- #[(tree value) (fun: (tree tail))] |
140 } | 140 } |
141 } else: { | 141 } else: { |
142 if: size = 1 { | 142 if: size = 1 { |
143 ret <- #[val 0] | 143 ret <- #[(fun: (tree value)) 0] |
144 } else: { | 144 } else: { |
145 if: (idx < half) { | 145 if: (idx < half) { |
146 ret <- #[ | 146 ret <- #[ |
147 (tree: (tree value) size: half set: idx to: val) | 147 (tree: (tree value) size: half update: idx with: fun) |
148 (tree tail) | 148 (tree tail) |
149 ] | 149 ] |
150 } else: { | 150 } else: { |
151 ret <- #[ | 151 ret <- #[ |
152 (tree value) | 152 (tree value) |
153 (tree: (tree tail) size: size-half set: idx-half to: val) | 153 (tree: (tree tail) size: size-half update: idx-half with: fun) |
154 ] | 154 ] |
155 } | 155 } |
156 } | 156 } |
157 } | 157 } |
158 ret | 158 ret |
159 } | 159 } |
160 | 160 |
161 tree:update:with <- :tree :idx :fun { | |
162 #[(tree value) (tree: (tree tail) size: (tree value) update: idx with: fun)] | |
163 } | |
164 | |
161 tree:set:to <- :tree :idx :val { | 165 tree:set:to <- :tree :idx :val { |
162 #[(tree value) (tree: (tree tail) size: (tree value) set: idx to: val)] | 166 tree: tree update: idx with: :el { val } |
163 } | 167 } |
164 | 168 |
165 height <- 0 | 169 height <- 0 |
166 width <- 0 | 170 width <- 0 |
167 | 171 |
184 print: (tree: tree set: 0 to: 42) | 188 print: (tree: tree set: 0 to: 42) |
185 print: (tree: tree set: 6 to: 42) | 189 print: (tree: tree set: 6 to: 42) |
186 print: (tree: tree set: 8 to: 42) | 190 print: (tree: tree set: 8 to: 42) |
187 print: (fold: lst 0 with: :acc el { acc + el }) | 191 print: (fold: lst 0 with: :acc el { acc + el }) |
188 print: (filter: lst :el { el > 4 }) | 192 print: (filter: lst :el { el > 4 }) |
193 print: (tree: tree update: 8 with: :el { el + 29 }) | |
189 } | 194 } |
190 | 195 |
191 } | 196 } |