X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=week9.mdwn;h=a0c843224b4df706141c26ae13658f07b3701e4c;hp=76ba7ad6d5f0ce9ea3bbc194866a591b1bb750c4;hb=9b5f91f462e9f64944ce2aa95ab3f8d30371a469;hpb=a1a38a5cfaede25b7e6299cac3275e1ccfd9b2db diff --git a/week9.mdwn b/week9.mdwn index 76ba7ad6..a0c84322 100644 --- a/week9.mdwn +++ b/week9.mdwn @@ -217,6 +217,8 @@ At the end, we'll get `(1, 2, 3)`. The reference cell that gets updated when we Here, too, just as in the OCaml fragment, all the calls to getter and setter are working with a single mutable variable `free_var`. +If you've got a copy of *The Seasoned Schemer*, which we recommended for the seminar, see the discussion at pp. 91-118 and 127-137. + If however you called `factory` twice, you'd have different `getter`/`setter` pairs, each of which had their own, independent `free_var`. In OCaml: let factory (starting_val : int) = @@ -228,8 +230,6 @@ If however you called `factory` twice, you'd have different `getter`/`setter` pa Here, the call to `setter` only mutated the reference cell associated with the `getter`/`setter` pair. The reference cell associated with `getter'` hasn't changed, and so `getter' ()` will still evaluate to 1. -If you've got a copy of *The Seasoned Schemer*, which we recommended for the seminar, see the discussion at pp. 91-118 and 127-137. - Notice in these fragments that once we return from inside the call to `factory`, the `free_var` mutable variable is no longer accessible, except through the helper functions `getter` and `setter` that we've provided. This is another way in which a thunk like `getter` can be useful: it still has access to the `free_var` reference cell that was created when it was, because its free variables are interpreted relative to the context in which `getter` was built, even if that context is otherwise no longer accessible. What `getter ()` evaluates to, however, will very much depend on *when* we evaluate it---in particular, it will depend on which calls to the corresponding `setter` were evaluated first. ##Referential opacity##