changeset 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 5ded24518dc5
files code/mike00.lm
diffstat 1 files changed, 12 insertions(+), 7 deletions(-) [+]
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