[plt-scheme] vectors by value

 From: Bill Richter (richter at math.northwestern.edu) Date: Fri Feb 7 21:57:41 EST 2003 Previous message: [plt-scheme] vectors by value Next message: [plt-scheme] vectors by value Messages sorted by: [date] [thread] [subject] [author]

```John, let me add to Robby's expert analysis:

If this doesn't help, please check out http://www.htdp.org/ and
read part vii (changing the state of variables) and viii (changing
compound values).

You didn't raise a newbie question, because your code won't run in

(define mylist '(hi there))
(define (changemylist x)
(begin
(set! x (append x '(this is new)))
x))

Welcome to DrScheme, version 203.
set!: expected a defined name after `set!', but found a function argument name

So 38.4 The Meaning of Advanced Scheme of HtDP will not explain your
code.  That's of course a big advantage of Advanced Scheme, the
simplified semantics, which mostly lets you use the substitution rule.

What you need to read is Section 40 (in viii as Robby said), which is
about constructors & mutators.  Advanced Student has a define-struct
mechanism that lets you perform the illegal code above. In particular:

Mutable Structures

Mixing set! and Structure Mutators: When a program uses both
set!-expressions and structure mutators, our evaluation rules
fail for some cases.  Specifically, they don't explain sharing
properly. Consider this program fragment:

(define the-point (make-posn 3 4))

(define another-point the-point)

(begin
(set! the-point 17)
(= (posn-x another-point) 3))

According to our rules, the two definitions refer to the same
structure. The second one does so by indirection. The
set!-expression changes what the-point stands for, but it
shouldn't affect the second definition. In particular, the
program should produce true. If we were to use our rules in a
naive manner, we would not be able to validate this point.

```

 Posted on the users mailing list. Previous message: [plt-scheme] vectors by value Next message: [plt-scheme] vectors by value Messages sorted by: [date] [thread] [subject] [author]