projects
/
lambda.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
(no commit message)
[lambda.git]
/
hints
/
assignment_10_hint_4.mdwn
diff --git
a/hints/assignment_10_hint_4.mdwn
b/hints/assignment_10_hint_4.mdwn
index
bb5a799
..
ee6f8bc
100644
(file)
--- a/
hints/assignment_10_hint_4.mdwn
+++ b/
hints/assignment_10_hint_4.mdwn
@@
-49,12
+49,13
@@
I said earlier, the encapsulation enforced by that library may make it somewhat
module TC = T.T(C);;
module TS = T.T(S);;
module TR = T.T(R);;
module TC = T.T(C);;
module TS = T.T(S);;
module TR = T.T(R);;
+ let tree = Some (T.Node(T.Leaf '1', T.Node(T.Leaf '2', T.Node(T.Leaf '3', T.Leaf '1'))));;
# let v0 = TC.(run_exn (distribute (fun a ->
C.(shift (fun k -> k a >>= fun v -> unit (1+v)))
) tree)) (fun a -> 0);;
# let v0 = TC.(run_exn (distribute (fun a ->
C.(shift (fun k -> k a >>= fun v -> unit (1+v)))
) tree)) (fun a -> 0);;
- - : int =
5
+ - : int =
4
# let v1 = TC.(run_exn (distribute (fun a ->
# let v1 = TC.(run_exn (distribute (fun a ->
@@
-69,8
+70,10
@@
I said earlier, the encapsulation enforced by that library may make it somewhat
v1 '2';; ~~> 1
*)
v1 '2';; ~~> 1
*)
+ # let annotater : char -> ('x, char) S.m =
+ fun a -> S.(puts (fun s -> (update_env s a)) >> unit a);;
# let v2 = TS.(run (distribute annotater tree)) (fun a -> 0);;
# let v2 = TS.(run (distribute annotater tree)) (fun a -> 0);;
- # let (t
ree',env) = v2 in TR.(run (distribute (fun a -> a) tree'
)) env;;
+ # let (t
, env) = v2 in TR.(run (distribute (fun a -> R.asks (fun e -> e a)) t
)) env;;
(* returns tree with leafs replaced with their numbers of occurrences *)
(* returns tree with leafs replaced with their numbers of occurrences *)