equal
deleted
inserted
replaced
264 qed |
264 qed |
265 |
265 |
266 |
266 |
267 subsection "Faster" |
267 subsection "Faster" |
268 |
268 |
269 fun braun_of_rec :: "'a \<Rightarrow> nat \<Rightarrow> 'a tree" where |
269 fun braun_of_naive :: "'a \<Rightarrow> nat \<Rightarrow> 'a tree" where |
270 "braun_of_rec x n = (if n=0 then Leaf |
270 "braun_of_naive x n = (if n=0 then Leaf |
271 else let m = (n-1) div 2 |
271 else let m = (n-1) div 2 |
272 in if odd n then Node (braun_of_rec x m) x (braun_of_rec x m) |
272 in if odd n then Node (braun_of_naive x m) x (braun_of_naive x m) |
273 else Node (braun_of_rec x (m + 1)) x (braun_of_rec x m))" |
273 else Node (braun_of_naive x (m + 1)) x (braun_of_naive x m))" |
274 |
274 |
275 fun braun2_of :: "'a \<Rightarrow> nat \<Rightarrow> 'a tree * 'a tree" where |
275 fun braun2_of :: "'a \<Rightarrow> nat \<Rightarrow> 'a tree * 'a tree" where |
276 "braun2_of x n = (if n = 0 then (Leaf, Node Leaf x Leaf) |
276 "braun2_of x n = (if n = 0 then (Leaf, Node Leaf x Leaf) |
277 else let (s,t) = braun2_of x ((n-1) div 2) |
277 else let (s,t) = braun2_of x ((n-1) div 2) |
278 in if odd n then (Node s x s, Node t x s) else (Node t x s, Node t x t))" |
278 in if odd n then (Node s x s, Node t x s) else (Node t x s, Node t x t))" |