- [H] ; *** aliasing ***
- let y be 2 in
- let x be y in
- let w alias y in
- (y, x, w) ==> (2, 2, 2)
-
- [I] ; mutation plus aliasing
- let y be 2 in
- let x be y in
- let w alias y in
- change y to 3 then
- (y, x, w) ==> (3, 2, 3)
-
- [J] let f be (lambda (y) -> BODY) in ; a
- ... f (EXPRESSION) ...
-
- (lambda (y) -> BODY) EXPRESSION
-
- let y be EXPRESSION in ; b
- ... BODY ...
-
- [K] ; *** passing "by reference" ***
- let f be (lambda (alias w) -> ; ?
- BODY
- ) in
- ... f (y) ...
-
- let w alias y in ; d
- ... BODY ...
-
- [L] let f be (lambda (alias w) ->
- change w to 2 then
- w + 2
- ) in
- let y be 1 in
- let z be f (y) in
- ; y is now 2, not 1
- (z, y) ==> (4, 2)
-
- [M] ; hyper-evaluativity
- let h be 1 in
- let p be 1 in
- let f be (lambda (alias x, alias y) ->
- ; contrast here: "let z be x + y + 1"
- change y to y + 1 then
- let z be x + y in
- change y to y - 1 then
- z
- ) in
- (f (h, p), f (h, h))
- ==> (3, 4)
-
- Notice: h, p have same value (1), but f (h, p) and f (h, h) differ
-
-
-Fine and Pryor on "coordinated contents" (see, e.g., [Hyper-Evaluativity](http://www.jimpryor.net/research/papers/Hyper-Evaluativity.txt))
+ [H] ; *** aliasing ***
+ let y be 2 in
+ let x be y in
+ let w alias y in
+ (y, x, w)
+ ; evaluates to (2, 2, 2)
+
+ [I] ; mutation plus aliasing
+ let y be 2 in
+ let x be y in
+ let w alias y in
+ change y to 3 then
+ (y, x, w)
+ ; evaluates to (3, 2, 3)
+
+ [J] ; as we already know, these are all equivalent:
+
+ let f be (lambda (y) -> BODY) in ; #1
+ ... f (EXPRESSION) ...
+
+ (lambda (y) -> BODY) EXPRESSION ; #2
+
+ let y be EXPRESSION in ; #3
+ ... BODY ...
+
+ [K] ; *** passing by reference ***
+ ; now think: "[J#1] is to [J#3] as [K#1] is to [K#2]"
+
+ ? ; #1
+
+ let w alias y in ; #2
+ ... BODY ...
+
+ ; We introduce a special syntactic form to supply
+ ; the missing ?
+
+ let f be (lambda (alias w) -> ; #1
+ BODY
+ ) in
+ ... f (y) ...
+
+ [L] let f be (lambda (alias w) ->
+ change w to 2 then
+ w + 2
+ ) in
+ let y be 1 in
+ let z be f (y) in
+ ; y is now 2, not 1
+ (z, y)
+ ; evaluates to (4, 2)
+
+ [M] ; hyper-evaluativity
+ let h be 1 in
+ let p be 1 in
+ let f be (lambda (alias x, alias y) ->
+ ; contrast here: "let z be x + y + 1"
+ change y to y + 1 then
+ let z be x + y in
+ change y to y - 1 then
+ z
+ ) in
+ (f (h, p), f (h, h))
+ ; evaluates to (3, 4)
+
+Notice: in [M], `h` and `p` have same value (1), but `f (h, p)` and `f (h, h)` differ.
+
+See Pryor's "[Hyper-Evaluativity](http://www.jimpryor.net/research/papers/Hyper-Evaluativity.txt)".