# HG changeset patch # User Michael Pavone # Date 1406347454 25200 # Node ID ce68c8a607eea82011ebdfbce62aa63dff8925fa # Parent 451043a65ff79ddc1f7defe5977e5714d06b4b16 Added a new file for experimenting with some helper functions diff -r 451043a65ff7 -r ce68c8a607ee code/mike00.lm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/code/mike00.lm Fri Jul 25 21:04:14 2014 -0700 @@ -0,0 +1,96 @@ +#{ + 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 + } + + makeTree <- :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) half) + (makeTree: (sub tail) size-half) + ] + } + } + ret + } + + 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 + } + + height <- 0 + width <- 0 + + main <- { + /* map <- initWorld value + height <- map length + width <- (map value) length + */ + + lst <- [1 2 3 4 5 6 7 8 9] + print: (length: lst) + print: (map: lst :el { el + 1 }) + print: (split: lst at: (length: lst) / 2) + tree <- makeTree: lst (length: lst) + print: tree + } + +} \ No newline at end of file