week11 tweaks
authorJim Pryor <profjim@jimpryor.net>
Tue, 30 Nov 2010 16:31:42 +0000 (11:31 -0500)
committerJim Pryor <profjim@jimpryor.net>
Tue, 30 Nov 2010 16:31:42 +0000 (11:31 -0500)
Signed-off-by: Jim Pryor <profjim@jimpryor.net>
assignment8.mdwn
week11.mdwn

index 5a2780d..256b2ce 100644 (file)
        &nbsp;
 
                let make_fringe_enumerator (t: 'a tree) =
-                       (* create a zipper targetting the root of t *)
-                       let zstart = new_zipper t
-                       in let zbotleft = move_botleft zstart
+                       (* create a zipper targetting the botleft of t *)
+                       let zbotleft = move_botleft (new_zipper t)
                        (* create a refcell initially pointing to zbotleft *)
                        in let zcell = ref (Some zbotleft)
                        (* construct the next_leaf function *)
                        in let next_leaf () : 'a option =
                                match !zcell with
-                               | None -> (* we've finished enumerating the fringe *)
-                                       None
                                | Some z -> (
                                        (* extract label of currently-targetted leaf *)
                                        let Leaf current = z.filler
@@ -48,6 +45,8 @@
                                                | Some z' -> Some (move_botleft z')
                                        (* return saved label *)
                                        in Some current
+                               | None -> (* we've finished enumerating the fringe *)
+                                       None
                                )
                        (* return the next_leaf function *)
                        in next_leaf
index c20bc1f..81534fc 100644 (file)
@@ -368,16 +368,13 @@ The following function takes an 'a tree and returns an 'a zipper focused on its
 Finally, we can use a mutable reference cell to define a function that enumerates a tree's fringe until it's exhausted:
 
        let make_fringe_enumerator (t: 'a tree) =
-           (* create a zipper targetting the root of t *)
-           let zstart = new_zipper t
-           in let zbotleft = move_botleft zstart
+           (* create a zipper targetting the botleft of t *)
+           let zbotleft = move_botleft (new_zipper t)
            (* create a refcell initially pointing to zbotleft *)
            in let zcell = ref (Some zbotleft)
            (* construct the next_leaf function *)
            in let next_leaf () : 'a option =
                match !zcell with
-               | None -> (* we've finished enumerating the fringe *)
-                   None
                | Some z -> (
                    (* extract label of currently-targetted leaf *)
                    let Leaf current = z.filler
@@ -387,6 +384,8 @@ Finally, we can use a mutable reference cell to define a function that enumerate
                        | Some z' -> Some (move_botleft z')
                    (* return saved label *)
                    in Some current
+               | None -> (* we've finished enumerating the fringe *)
+                   None
                )
            (* return the next_leaf function *)
            in next_leaf