Mercurial > repos > icfp2014
view code/mike00.lm @ 15:4bc308c03952
Fix argument passing to main
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 25 Jul 2014 21:06:22 -0700 |
parents | ce68c8a607ee |
children | 89aa6d3165ee |
line wrap: on
line source
#{ 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 } }