summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
e8c44d3)
Signed-off-by: Jim Pryor <profjim@jimpryor.net>
It makes debugging easier if we work with a tree whose starting leaf
It makes debugging easier if we work with a tree whose starting leaf
-elements are differently types than the tree we aim to finish with. So:
+elements are differently typed than the tree we aim to finish with. So:
let tree = Node(Leaf '1', Node(Leaf '2', Node(Leaf '3', Leaf '1')));;
let tree = Node(Leaf '1', Node(Leaf '2', Node(Leaf '3', Leaf '1')));;
-Now, we already know how to count the leaves using a continuation monad
+Now, we already know how to count the leaves using a Continuation monad
in tree shape:
let v0 = TreeCont.monadize (fun a k -> 1 + k a) tree (fun t -> 0);;
in tree shape:
let v0 = TreeCont.monadize (fun a k -> 1 + k a) tree (fun t -> 0);;
let update_env e x = fun y -> (if x = y then 1 else 0) + e y;;
let update_env e x = fun y -> (if x = y then 1 else 0) + e y;;
- let v1 = TreeCont.monadize (fun a k e ->
- let e_prev = k a e
- in update_env e_prev a
+ let v1 = TreeCont.monadize (fun a k e0 ->
+ let ecur = k a e0
+ in update_env ecur a
) tree (fun t e -> e) (fun a -> 0);;
(* now
) tree (fun t e -> e) (fun a -> 0);;
(* now
-How does this work? Our distributed function (fun a k e -> ...) takes a leaf element a and a continuation k, which maps leaf elements and environments e to new environments.
+How does this work? Our distributed function `fun a k e -> ...` takes a leaf element `a` and a continuation `k`, which maps leaf elements and environments `e0` to new environments `ecur`. It gives back a function from `e0` to an updated version of `ecur`.
Our seed function here is the initial continuation. Instead of taking a leaf element and an env, it takes a tree of such elements and an env. In general, wherever the distributed function takes `'a`s, the seed function takes `'a tree`s.
Our seed function here is the initial continuation. Instead of taking a leaf element and an env, it takes a tree of such elements and an env. In general, wherever the distributed function takes `'a`s, the seed function takes `'a tree`s.