comparison code/mike00.lm @ 17:c33dce59ce3d

Store tree size in outer node so it does not need to be manually passed in
author Michael Pavone <pavone@retrodev.com>
date Fri, 25 Jul 2014 21:40:49 -0700
parents 89aa6d3165ee
children 8ff2349f36c6
comparison
equal deleted inserted replaced
16:89aa6d3165ee 17:c33dce59ce3d
35 lst <- lst tail 35 lst <- lst tail
36 } 36 }
37 reverse: new 37 reverse: new
38 } 38 }
39 39
40 makeTree <- :lst size { 40 makeTree:size <- :lst :size {
41 ret <- 0 41 ret <- 0
42 sub <- 0 42 sub <- 0
43 half <- size / 2 43 half <- size / 2
44 if: size = 2 { 44 if: size = 2 {
45 ret <- #[(lst value) ((lst tail) value)] 45 ret <- #[(lst value) ((lst tail) value)]
47 if: size = 1 { 47 if: size = 1 {
48 ret <- lst 48 ret <- lst
49 } else: { 49 } else: {
50 sub <- split: lst at: half 50 sub <- split: lst at: half
51 ret <- #[ 51 ret <- #[
52 (makeTree: (sub value) half) 52 (makeTree: (sub value) size: half)
53 (makeTree: (sub tail) size-half) 53 (makeTree: (sub tail) size: size-half)
54 ] 54 ]
55 } 55 }
56 } 56 }
57 ret 57 ret
58 } 58 }
59 59
60 makeTree <- :lst {
61 size <- lst length
62 #[size (makeTree: lst size: size)]
63 }
64
60 get:fromTree:size <- :idx :tree :size { 65 get:fromTree:size <- :idx :tree :size {
66 print: #[1 tree size]
61 ret <- 0 67 ret <- 0
62 half <- size / 2 68 half <- size / 2
63 if: size <= 2 { 69 if: size <= 2 {
64 if: idx = 0 { 70 if: idx = 0 {
65 ret <- tree value 71 ret <- tree value
74 } 80 }
75 } 81 }
76 ret 82 ret
77 } 83 }
78 84
85 get:fromTree <- :idx :tree {
86 size <- tree value
87 print: #[0 size]
88 get: idx fromTree: (tree tail) size: size
89 }
90
79 height <- 0 91 height <- 0
80 width <- 0 92 width <- 0
81 93
82 main <- { 94 main <- {
83 /* map <- initWorld value 95 /* map <- initWorld value
87 99
88 lst <- [1 2 3 4 5 6 7 8 9] 100 lst <- [1 2 3 4 5 6 7 8 9]
89 print: (length: lst) 101 print: (length: lst)
90 print: (map: lst :el { el + 1 }) 102 print: (map: lst :el { el + 1 })
91 print: (split: lst at: (length: lst) / 2) 103 print: (split: lst at: (length: lst) / 2)
92 size <- (length: lst) 104 tree <- makeTree: lst
93 tree <- makeTree: lst size
94 print: tree 105 print: tree
95 print: (get: 0 fromTree: tree size: size) 106 print: (get: 0 fromTree: tree)
96 print: (get: 6 fromTree: tree size: size) 107 print: (get: 6 fromTree: tree)
97 print: (get: 8 fromTree: tree size: size) 108 print: (get: 8 fromTree: tree)
98 } 109 }
99 110
100 } 111 }