From: Jim Pryor Date: Sun, 21 Nov 2010 22:45:24 +0000 (-0500) Subject: week9 tweak X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=commitdiff_plain;h=8ff8ea492898be6cbb5fa1a237cbcf91471a7cee;ds=sidebyside week9 tweak Signed-off-by: Jim Pryor --- diff --git a/week9.mdwn b/week9.mdwn index 3f0911ab..19041582 100644 --- a/week9.mdwn +++ b/week9.mdwn @@ -500,62 +500,73 @@ To get the whole process started, the complex computation so defined will need t -- FIXME -- - [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)". ##Four grades of mutation involvement##