changeset 40:d5ccb66ae98b

Move some basic library code out of dotScanner.lm into separate files now that import:from works
author Michael Pavone <pavone@retrodev.com>
date Sat, 26 Jul 2014 15:29:01 -0700
parents 0e1fc2b2832f
children e1047192610c
files code/dotScanner.lm code/ll.lm code/tree.lm
diffstat 3 files changed, 196 insertions(+), 172 deletions(-) [+]
line wrap: on
line diff
--- a/code/dotScanner.lm	Sat Jul 26 15:25:41 2014 -0700
+++ b/code/dotScanner.lm	Sat Jul 26 15:29:01 2014 -0700
@@ -1,176 +1,25 @@
 #{
-	length <- :lst {
-		len <- []
-		while: { not: (lst isInteger?)} do: {
-			lst <- lst tail
-			len <- len + 1
-		}
-		len
-	}
-	
-	reverse <- :lst {
-		new <- []
-		while: { not: (lst isInteger?)} do: {
-			new <- (lst value) | new
-			lst <- lst tail
-		}
-		new
-	}
-
-	split:at <- :lst :pos {
-		first <- []
-		i <- 0
-		while: { i < pos } do: {
-			first <- (lst value) | first
-			lst <- lst tail
-			i <- i + 1
-		}
-		#[(reverse: first) lst]
-	}
-	
-	map <- :lst fun {
-		new <- []
-		while: { not: (lst isInteger?) } do: {
-			new <- (fun: (lst value)) | new
-			lst <- lst tail
-		}
-		reverse: new
-	}
-	
-	fold:with <- :lst acc :fun {
-		while: { not: (lst isInteger?) } do: {
-			acc <- fun: acc (lst value)
-			lst <- lst tail
-		}
-		acc
-	}
-	
-	filter <- :lst pred {
-		new <- []
-		while: { not: (lst isInteger?) } do: {
-			if: (pred: (lst value)) {
-				new <- (lst value) | new
-			} else: {}
-			lst <- lst tail
-		}
-		reverse: new
-	}
-
-	flatten <- :lst {
-		fold: lst [] with: :acc el {
-			fold: el acc with: :iacc iel {
-				iel | iacc
-			}
-		}
-	}
-	
-	makeTree:size <- :lst :size {
-		ret <- 0
-		sub <- 0
-		half <- size / 2
-		if: size = 2 {
-			ret <- #[(lst value) ((lst tail) value)]
-		} else: {
-			if: size = 1 {
-				ret <- lst
-			} else: {
-				sub <- split: lst at: half
-				ret <- #[
-					(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 {
-		ret <- 0
-		half <- size / 2
-		if: size <= 2 {
-			if: idx = 0 {
-				ret <- tree value
-			} else: {	
-				ret <- tree tail
-			}
-		} else: {
-			if: idx < half {
-				ret <- get: idx fromTree: (tree value) size: half
-			} else: {
-				ret <- get: idx-half fromTree: (tree tail) size: size-half
-			}
-		}
-		ret
-	}
-	
-	get:fromTree <- :idx :tree {
-		size <- tree value
-		get: idx fromTree: (tree tail) size: size
-	}
-	
-	treeMap:size <- :tree fun :size {
-		ret <- 0
-		half <- size / 2
-		if: size = 2 {
-			ret <- #[(fun: (tree value)) (fun: (tree tail))]
-		} else: {
-			if: size = 1 {
-				ret <- #[(fun: (tree value)) 0]
-			} else: {
-				ret <- #[
-					(treeMap: (tree value) fun size: half)
-					(treeMap: (tree tail) fun size: size-half)
-				]
-			}
-		}
-		ret
-	}
-	
-	treeMap <- :tree fun {	
-		#[(tree value) (treeMap: (tree tail) fun size: (tree value))]
-	}
-	
-	tree:size:update:with <- :tree :size :idx :fun {
-		ret <- 0
-		half <- size / 2
-		if: size = 2 {
-			if: idx = 0 {
-				ret <- #[(fun: (tree value)) (tree tail)]
-			} else: {
-				ret <- #[(tree value) (fun: (tree tail))]
-			}
-		} else: {
-			if: size = 1 {
-				ret <- #[(fun: (tree value)) 0]
-			} else: {
-				if: (idx < half) {
-					ret <- #[
-						(tree: (tree value) size: half update: idx with: fun)
-						(tree tail)
-					]
-				} else: {
-					ret <- #[
-						(tree value)
-						(tree: (tree tail) size: size-half update: idx-half with: fun)
-					]
-				}
-			}
-		}
-		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: tree update: idx with: :el { val }
-	}
+	import: [
+		length
+		reverse
+		split:at
+		map
+		fold:with
+		filter
+		flatten
+	] from: (module: "ll.lm")
+		
+	import: [
+		makeTree:size
+		makeTree
+		get:fromTree:size
+		get:fromTree
+		treeMap:size
+		treeMap
+		tree:size:update:with
+		tree:update:with
+		tree:set:to
+	] from: (module: "tree.lm")
 
 	grid:get <- :grid :pos {
 		x <- pos value
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code/ll.lm	Sat Jul 26 15:29:01 2014 -0700
@@ -0,0 +1,66 @@
+#{
+	length <- :lst {
+		len <- []
+		while: { not: (lst isInteger?)} do: {
+			lst <- lst tail
+			len <- len + 1
+		}
+		len
+	}
+	
+	reverse <- :lst {
+		new <- []
+		while: { not: (lst isInteger?)} do: {
+			new <- (lst value) | new
+			lst <- lst tail
+		}
+		new
+	}
+
+	split:at <- :lst :pos {
+		first <- []
+		i <- 0
+		while: { i < pos } do: {
+			first <- (lst value) | first
+			lst <- lst tail
+			i <- i + 1
+		}
+		#[(reverse: first) lst]
+	}
+	
+	map <- :lst fun {
+		new <- []
+		while: { not: (lst isInteger?) } do: {
+			new <- (fun: (lst value)) | new
+			lst <- lst tail
+		}
+		reverse: new
+	}
+	
+	fold:with <- :lst acc :fun {
+		while: { not: (lst isInteger?) } do: {
+			acc <- fun: acc (lst value)
+			lst <- lst tail
+		}
+		acc
+	}
+	
+	filter <- :lst pred {
+		new <- []
+		while: { not: (lst isInteger?) } do: {
+			if: (pred: (lst value)) {
+				new <- (lst value) | new
+			} else: {}
+			lst <- lst tail
+		}
+		reverse: new
+	}
+
+	flatten <- :lst {
+		fold: lst [] with: :acc el {
+			fold: el acc with: :iacc iel {
+				iel | iacc
+			}
+		}
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code/tree.lm	Sat Jul 26 15:29:01 2014 -0700
@@ -0,0 +1,109 @@
+#{
+	makeTree:size <- :lst :size {
+		ret <- 0
+		sub <- 0
+		half <- size / 2
+		if: size = 2 {
+			ret <- #[(lst value) ((lst tail) value)]
+		} else: {
+			if: size = 1 {
+				ret <- lst
+			} else: {
+				sub <- split: lst at: half
+				ret <- #[
+					(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 {
+		ret <- 0
+		half <- size / 2
+		if: size <= 2 {
+			if: idx = 0 {
+				ret <- tree value
+			} else: {	
+				ret <- tree tail
+			}
+		} else: {
+			if: idx < half {
+				ret <- get: idx fromTree: (tree value) size: half
+			} else: {
+				ret <- get: idx-half fromTree: (tree tail) size: size-half
+			}
+		}
+		ret
+	}
+	
+	get:fromTree <- :idx :tree {
+		size <- tree value
+		get: idx fromTree: (tree tail) size: size
+	}
+	
+	treeMap:size <- :tree fun :size {
+		ret <- 0
+		half <- size / 2
+		if: size = 2 {
+			ret <- #[(fun: (tree value)) (fun: (tree tail))]
+		} else: {
+			if: size = 1 {
+				ret <- #[(fun: (tree value)) 0]
+			} else: {
+				ret <- #[
+					(treeMap: (tree value) fun size: half)
+					(treeMap: (tree tail) fun size: size-half)
+				]
+			}
+		}
+		ret
+	}
+	
+	treeMap <- :tree fun {	
+		#[(tree value) (treeMap: (tree tail) fun size: (tree value))]
+	}
+	
+	tree:size:update:with <- :tree :size :idx :fun {
+		ret <- 0
+		half <- size / 2
+		if: size = 2 {
+			if: idx = 0 {
+				ret <- #[(fun: (tree value)) (tree tail)]
+			} else: {
+				ret <- #[(tree value) (fun: (tree tail))]
+			}
+		} else: {
+			if: size = 1 {
+				ret <- #[(fun: (tree value)) 0]
+			} else: {
+				if: (idx < half) {
+					ret <- #[
+						(tree: (tree value) size: half update: idx with: fun)
+						(tree tail)
+					]
+				} else: {
+					ret <- #[
+						(tree value)
+						(tree: (tree tail) size: size-half update: idx-half with: fun)
+					]
+				}
+			}
+		}
+		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: tree update: idx with: :el { val }
+	}
+}
\ No newline at end of file