annotate code/tree.lm @ 41:e1047192610c

Added filledTree function to tree.lm for creating a tree filled with a certain value
author Michael Pavone <pavone@retrodev.com>
date Sat, 26 Jul 2014 19:43:11 -0700
parents d5ccb66ae98b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
41
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
27 _filledTree <- :val size {
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
28 ret <- 0
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
29 half <- size / 2
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
30 if: size > 2 {
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
31 ret <- #[
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
32 (_filledTree: val half)
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
33 (_filledTree: val size-half)
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
34 ]
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
35 } else: {
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
36 ret <- #[val val]
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
37 }
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
38 ret
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
39 }
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
40
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
41 filledTree <- :val size {
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
42 #[size (_filledTree: val size)]
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
43 }
e1047192610c Added filledTree function to tree.lm for creating a tree filled with a certain value
Michael Pavone <pavone@retrodev.com>
parents: 40
diff changeset
44
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
45 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
46 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
47 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
48 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
49 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
50 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
51 } 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
52 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
53 }
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 } 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
55 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
56 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
57 } 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
58 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
59 }
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 }
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 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
62 }
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 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
65 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
66 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
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: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
70 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
71 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
72 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
73 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
74 } 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
75 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
76 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
77 } 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
78 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
79 (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
80 (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
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 }
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 }
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
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 }
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
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 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
88 #[(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
89 }
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 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
92 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
93 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
94 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
95 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
96 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
97 } 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
98 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
99 }
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 } 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
101 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
102 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
103 } 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
104 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
105 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
106 (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
107 (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
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 } 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
110 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
111 (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
112 (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
113 ]
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
114 }
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
115 }
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
116 }
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
117 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
118 }
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
119
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
120 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
121 #[(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
122 }
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
123
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
124 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
125 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
126 }
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
127 }