X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=week9.mdwn;h=1992e207563a97504dfbbc1cbc154d0929d678d2;hp=7ffe03e63d31a3db996c8d8a21e801f78924a4b2;hb=945835525c1a4f9d8210693af0b60ecf957ba8be;hpb=ec887a98ebd8ea50137b74ad525cd04d38791ce8;ds=sidebyside diff --git a/week9.mdwn b/week9.mdwn index 7ffe03e6..1992e207 100644 --- a/week9.mdwn +++ b/week9.mdwn @@ -429,7 +429,7 @@ Here's how to implement these. We'll suppose that our assignment function is lis (* evaluate expr2 using original assignment function and new store *) in eval expr2 g s'' -Note: Chris uses this kind of machinery on the third page of the Nov 22 handout. Except he implements `Let` the way we here implement `Change`. And he adds an implementation of `Alias` (see below). Some minor differences: on his handout (and following Groenendijk, Stockhof and Veltman), he uses `r` and `g` where we use `g` and `s` respectively. Also, he implements his `r` with a function from `char` to `int`, instead of a `(char * int) list`, as we do here. It should be obvious how to translate between these. His implementation requires that variables always already have an associated peg. So that when we call `Let(c, expr1, expr2)` for the first time with `c`, there's a peg whose value is to be updated. That's easier to ensure when you implement the assignment as a function than as a `(char * int) list`. +Note: Chris uses this kind of machinery on the third page of the Nov 22 handout. Except he implements `Let` the way we here implement `Change`. And he adds an implementation of `Alias` (see below). Some minor differences: on his handout (and following Groenendijk, Stokhof and Veltman), he uses `r` and `g` where we use `g` and `s` respectively. Also, he implements his `r` with a function from `char` to `int`, instead of a `(char * int) list`, as we do here. It should be obvious how to translate between these. His implementation requires that variables always already have an associated peg. So that when we call `Let(c, expr1, expr2)` for the first time with `c`, there's a peg whose value is to be updated. That's easier to ensure when you implement the assignment as a function than as a `(char * int) list`. ##How to implement mutation with a State monad##