changeset 17:c33dce59ce3d

Store tree size in outer node so it does not need to be manually passed in
author Michael Pavone <pavone@retrodev.com>
date Fri, 25 Jul 2014 21:40:49 -0700
parents 89aa6d3165ee
children 8ff2349f36c6
files code/mike00.lm
diffstat 1 files changed, 19 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/code/mike00.lm	Fri Jul 25 21:16:25 2014 -0700
+++ b/code/mike00.lm	Fri Jul 25 21:40:49 2014 -0700
@@ -37,7 +37,7 @@
 		reverse: new
 	}
 	
-	makeTree <- :lst size {
+	makeTree:size <- :lst :size {
 		ret <- 0
 		sub <- 0
 		half <- size / 2
@@ -49,15 +49,21 @@
 			} else: {
 				sub <- split: lst at: half
 				ret <- #[
-					(makeTree: (sub value) half)
-					(makeTree: (sub tail) size-half)
+					(makeTree: (sub value) size: half)
+					(makeTree: (sub tail) size: size-half)
 				]
 			}
 		}
 		ret
 	}
 	
+	makeTree <- :lst {
+		size <- lst length
+		#[size (makeTree: lst size: size)]
+	}
+	
 	get:fromTree:size <- :idx :tree :size {
+		print: #[1 tree size]
 		ret <- 0
 		half <- size / 2
 		if: size <= 2 {
@@ -76,6 +82,12 @@
 		ret
 	}
 	
+	get:fromTree <- :idx :tree {
+		size <- tree value
+		print: #[0 size]
+		get: idx fromTree: (tree tail) size: size
+	}
+	
 	height <- 0
 	width <- 0
 	
@@ -89,12 +101,11 @@
 		print: (length: lst)
 		print: (map: lst :el { el + 1 })
 		print: (split: lst at: (length: lst) / 2)
-		size <- (length: lst)
-		tree <- makeTree: lst size
+		tree <- makeTree: lst
 		print: tree
-		print: (get: 0 fromTree: tree size: size)
-		print: (get: 6 fromTree: tree size: size)
-		print: (get: 8 fromTree: tree size: size)
+		print: (get: 0 fromTree: tree)
+		print: (get: 6 fromTree: tree)
+		print: (get: 8 fromTree: tree)
 	}
 	
 }
\ No newline at end of file