# HG changeset patch # User William Morgan # Date 1406353972 25200 # Node ID ec0b74f4f2d959ff15e5d1d376d8d1a815c59daf # Parent 37158acf31e59be071a7205eeac1d847d25347b3# Parent 5ded24518dc5a5da1b9e24a03d622ce8afcb4d0a Merge diff -r 37158acf31e5 -r ec0b74f4f2d9 code/dotScanner.lm --- a/code/dotScanner.lm Fri Jul 25 22:52:05 2014 -0700 +++ b/code/dotScanner.lm Fri Jul 25 22:52:52 2014 -0700 @@ -1,4 +1,183 @@ #{ + 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 + } + + 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 { + print: #[1 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 + print: #[0 size] + 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 } + } + + grid:update:with <- :grid :pos :fun { + x <- pos value + y <- pos tail + tree: grid update: y with: :row { + tree: row update: x with: fun + } + } + + grid:set:to <- :grid :pos :val { + grid: grid update: pox with: :el { val } + } + /* ListGet <- :cell idx { if: idx = 0 {cell value} else: { @@ -56,7 +235,16 @@ //} counterLoad <- 4 step <- :myState world { - print: (world value) + grid <- makeTree: (map: (world value) :row { makeTree: row }) + lmState <- (world value) tail + myLoc <- (lmState tail) value + + + visited <- treeMap: grid :el { 0 } + visited <- tree: visited set: myLoc to: 1 + + + //myPos <- path <- [3 1 3 1] //scanFor: 2 3 [myPos] move <- myState value @@ -68,11 +256,11 @@ move <- 0 } else: {} } else: {} - #[#[move counter] ((path tail) value)] + #[0 ((path tail) value)] } main <- :initWorld mystery { - #[#[0 counterLoad] step] + #[0 step] } } diff -r 37158acf31e5 -r ec0b74f4f2d9 code/mike00.lm --- a/code/mike00.lm Fri Jul 25 22:52:05 2014 -0700 +++ b/code/mike00.lm Fri Jul 25 22:52:52 2014 -0700 @@ -37,7 +37,26 @@ reverse: new } - makeTree <- :lst size { + 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 + } + + makeTree:size <- :lst :size { ret <- 0 sub <- 0 half <- size / 2 @@ -49,15 +68,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 +101,71 @@ ret } + get:fromTree <- :idx :tree { + size <- tree value + print: #[0 size] + 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 } + } + height <- 0 width <- 0 @@ -89,8 +179,18 @@ print: (length: lst) print: (map: lst :el { el + 1 }) print: (split: lst at: (length: lst) / 2) - tree <- makeTree: lst (length: lst) + tree <- makeTree: lst print: tree + print: (get: 0 fromTree: tree) + print: (get: 6 fromTree: tree) + print: (get: 8 fromTree: tree) + print: (treeMap: tree :el { el + 1 }) + print: (tree: tree set: 0 to: 42) + print: (tree: tree set: 6 to: 42) + 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 diff -r 37158acf31e5 -r ec0b74f4f2d9 code/simple.lm --- a/code/simple.lm Fri Jul 25 22:52:05 2014 -0700 +++ b/code/simple.lm Fri Jul 25 22:52:52 2014 -0700 @@ -14,6 +14,7 @@ } main <- :initWorld mystery { + print: mystery #[#[0 counterLoad] step] } } \ No newline at end of file