# HG changeset patch # User Michael Pavone # Date 1406352656 25200 # Node ID edc89d9c9e1007f77f4574c61656a26efd118445 # Parent 5a27dd6f03cd005c12d5e5eff025da81193cddff Added tree:update:with function. Reimplemented tree:set:to with tree:update:with diff -r 5a27dd6f03cd -r edc89d9c9e10 code/mike00.lm --- 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