Mercurial > repos > icfp2014
diff 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 |
line wrap: on
line diff
--- a/code/mike00.lm Fri Jul 25 22:17:47 2014 -0700 +++ b/code/mike00.lm Fri Jul 25 22:30:56 2014 -0700 @@ -129,28 +129,28 @@ #[(tree value) (treeMap: (tree tail) fun size: (tree value))] } - tree:size:set:to <- :tree :size :idx :val { + tree:size:update:with <- :tree :size :idx :fun { ret <- 0 half <- size / 2 if: size = 2 { if: idx = 0 { - ret <- #[val (tree tail)] + ret <- #[(fun: (tree value)) (tree tail)] } else: { - ret <- #[(tree value) val] + ret <- #[(tree value) (fun: (tree tail))] } } else: { if: size = 1 { - ret <- #[val 0] + ret <- #[(fun: (tree value)) 0] } else: { if: (idx < half) { ret <- #[ - (tree: (tree value) size: half set: idx to: val) + (tree: (tree value) size: half update: idx with: fun) (tree tail) ] } else: { ret <- #[ (tree value) - (tree: (tree tail) size: size-half set: idx-half to: val) + (tree: (tree tail) size: size-half update: idx-half with: fun) ] } } @@ -158,8 +158,12 @@ ret } + tree:update:with <- :tree :idx :fun { + #[(tree value) (tree: (tree tail) size: (tree value) update: idx with: fun)] + } + tree:set:to <- :tree :idx :val { - #[(tree value) (tree: (tree tail) size: (tree value) set: idx to: val)] + tree: tree update: idx with: :el { val } } height <- 0 @@ -186,6 +190,7 @@ print: (tree: tree set: 8 to: 42) print: (fold: lst 0 with: :acc el { acc + el }) print: (filter: lst :el { el > 4 }) + print: (tree: tree update: 8 with: :el { el + 29 }) } } \ No newline at end of file