Mercurial > repos > icfp2014
diff code/mike00.lm @ 19:84f595cff062
Added tree:set:to function
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 25 Jul 2014 22:09:54 -0700 |
parents | 8ff2349f36c6 |
children | 5a36fda13a47 |
line wrap: on
line diff
--- a/code/mike00.lm Fri Jul 25 21:56:26 2014 -0700 +++ b/code/mike00.lm Fri Jul 25 22:09:54 2014 -0700 @@ -110,6 +110,39 @@ #[(tree value) (treeMap: (tree tail) fun size: (tree value))] } + tree:size:set:to <- :tree :size :idx :val { + ret <- 0 + half <- size / 2 + if: size = 2 { + if: idx = 0 { + ret <- #[val (tree tail)] + } else: { + ret <- #[(tree value) val] + } + } else: { + if: size = 1 { + ret <- #[val 0] + } else: { + if: (idx < half) { + ret <- #[ + (tree: (tree value) size: half set: idx to: val) + (tree tail) + ] + } else: { + ret <- #[ + (tree value) + (tree: (tree tail) size: size-half set: idx-half to: val) + ] + } + } + } + ret + } + + tree:set:to <- :tree :idx :val { + #[(tree value) (tree: (tree tail) size: (tree value) set: idx to: val)] + } + height <- 0 width <- 0 @@ -129,6 +162,9 @@ 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) } } \ No newline at end of file