week9 tweak
authorJim Pryor <profjim@jimpryor.net>
Mon, 22 Nov 2010 02:55:07 +0000 (21:55 -0500)
committerJim Pryor <profjim@jimpryor.net>
Mon, 22 Nov 2010 02:55:07 +0000 (21:55 -0500)
Signed-off-by: Jim Pryor <profjim@jimpryor.net>
week9.mdwn

index 913e4bf..2e80250 100644 (file)
@@ -100,7 +100,13 @@ Scheme is similar. There are various sorts of reference cells available in Schem
                (set-box! ycell 3)
                (+ x (unbox ycell)))
 
-(C has explicit-style mutable variables, too, which it calls *pointers*. But simple variables in C are already mutable, in the implicit style.)
+C has explicit-style mutable variables, too, which it calls *pointers*. But simple variables in C are already mutable, in the implicit style. Scheme also has both styles of mutation. In addition to the explicit boxes, Scheme also lets you mutate unboxed variables:
+
+       (begin
+               (define x 1)
+               (set! x 2)
+               x)
+       ; evaluates to 2
 
 When dealing with explicit-style mutation, there's a difference between the types and values of `ycell` and `!ycell` (or in Scheme, `(unbox ycell)`). The former has the type `int ref`: the variable `ycell` is assigned a reference cell that contains an `int`. The latter has the type `int`, and has whatever value is now stored in the relevant reference cell. In an implicit-style framework though, we only have the resources to refer to the contents of the relevant reference cell. `y` in fragment [G] or the C snippet above has the type `int`, and only ever evaluates to `int` values.