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 }