Mercurial > repos > icfp2014
annotate code/tree.lm @ 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 | |
children | e1047192610c |
rev | line source |
---|---|
40
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #{ |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 makeTree:size <- :lst :size { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 ret <- 0 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 sub <- 0 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 half <- size / 2 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 if: size = 2 { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 ret <- #[(lst value) ((lst tail) value)] |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 } else: { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 if: size = 1 { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 ret <- lst |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 } else: { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 sub <- split: lst at: half |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 ret <- #[ |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 (makeTree: (sub value) size: half) |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 (makeTree: (sub tail) size: size-half) |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 ] |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 ret |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 makeTree <- :lst { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 size <- lst length |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 #[size (makeTree: lst size: size)] |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 get:fromTree:size <- :idx :tree :size { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 ret <- 0 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 half <- size / 2 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 if: size <= 2 { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 if: idx = 0 { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 ret <- tree value |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 } else: { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 ret <- tree tail |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 } else: { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 if: idx < half { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 ret <- get: idx fromTree: (tree value) size: half |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 } else: { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 ret <- get: idx-half fromTree: (tree tail) size: size-half |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 ret |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 get:fromTree <- :idx :tree { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 size <- tree value |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 get: idx fromTree: (tree tail) size: size |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 treeMap:size <- :tree fun :size { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 ret <- 0 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 half <- size / 2 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 if: size = 2 { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 ret <- #[(fun: (tree value)) (fun: (tree tail))] |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 } else: { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 if: size = 1 { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 ret <- #[(fun: (tree value)) 0] |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 } else: { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 ret <- #[ |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 (treeMap: (tree value) fun size: half) |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 (treeMap: (tree tail) fun size: size-half) |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 ] |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 ret |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 treeMap <- :tree fun { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 #[(tree value) (treeMap: (tree tail) fun size: (tree value))] |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 tree:size:update:with <- :tree :size :idx :fun { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 ret <- 0 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 half <- size / 2 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 if: size = 2 { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 if: idx = 0 { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 ret <- #[(fun: (tree value)) (tree tail)] |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 } else: { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 ret <- #[(tree value) (fun: (tree tail))] |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 } else: { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
83 if: size = 1 { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
84 ret <- #[(fun: (tree value)) 0] |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 } else: { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
86 if: (idx < half) { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
87 ret <- #[ |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
88 (tree: (tree value) size: half update: idx with: fun) |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
89 (tree tail) |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
90 ] |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
91 } else: { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
92 ret <- #[ |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
93 (tree value) |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
94 (tree: (tree tail) size: size-half update: idx-half with: fun) |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
95 ] |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
96 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
97 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
99 ret |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
100 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
101 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
102 tree:update:with <- :tree :idx :fun { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
103 #[(tree value) (tree: (tree tail) size: (tree value) update: idx with: fun)] |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
104 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
105 |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
106 tree:set:to <- :tree :idx :val { |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
107 tree: tree update: idx with: :el { val } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
108 } |
d5ccb66ae98b
Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
109 } |