projects
/
lambda.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
alternate Y1,Y2 tweak
[lambda.git]
/
hints
/
assignment_4_hint_3_alternate_1.mdwn
diff --git
a/hints/assignment_4_hint_3_alternate_1.mdwn
b/hints/assignment_4_hint_3_alternate_1.mdwn
index
12ddbd6
..
900c6cb
100644
(file)
--- a/
hints/assignment_4_hint_3_alternate_1.mdwn
+++ b/
hints/assignment_4_hint_3_alternate_1.mdwn
@@
-2,22
+2,24
@@
Alternate strategy for Y1, Y2
* This is (in effect) the strategy used by OCaml. The mutually recursive:
* This is (in effect) the strategy used by OCaml. The mutually recursive:
- let rec
- f x = A ; A may refer to f or g
- and
- g y = B ; B may refer to f or g
- in
- C
+
let rec
+
f x = A ; A may refer to f or g
+
and
+
g y = B ; B may refer to f or g
+
in
+
C
-
is implemented using regular, non-mutual recursion, like this (`f'
` is a variable not occurring free in `A`, `B`, or `C`):
+
is implemented using regular, non-mutual recursion, like this (`u
` is a variable not occurring free in `A`, `B`, or `C`):
- let rec f' g x = (let f = f' g in A)
- in let rec g y = (let f = f' g in B)
- in let f = f' g in C
+ let rec u g x = (let f = u g in A)
+ in let rec g y = (let f = u g in B)
+ in let f = u g in
+ C
-or, expanded into the form we've been working with:
+
or, expanded into the form we've been working with:
- let f' = Y (\f' g x. (\f. A) (f' g)) in
- let g = Y (\g y. (\f. B) (f' g)) in
- let f = f' g
+ let u = Y (\u g x. (\f. A) (u g)) in
+ let g = Y (\g y. (\f. B) (u g)) in
+ let f = u g in
+ C