On Tuesday, December 30, 2003 3:10 PM, Ben Rudiak-Gould [SMTP:benrg@dark.darkweb.com] wrote:
Interesting.
This still violates referential transparency, though. (c 'get) returns a value or errors out depending on whether (c 'set) has been called yet.
Oh, sure. I didn't mean to quibble with the idea that continuations are computational effects. Just wanted to point out that (I think) you can't macro express mutation with call/cc, unless you've already got mutation anyway.
And take a look at this!
(define c (make-cell)) (define d c) ((d 'set) 9) (d 'get)
Error in car: #<procedure> is not a pair. Type (debug) to enter the debugger.
Something very nasty is going on here. I'm not sure exactly what it is, but I think at least one of the define statements is getting executed at least twice.
Yup. If you do that, you can use d as your setter and c as your getter:
(define c (make-cell)) (define d c) ((d 'set) 9) (c 'get) 9 ((d 'set) 17) (c 'get) 17
Does this help?:
(define c (let ((cell (make-cell))) (display "Hi, Ben.") (newline) cell)) Hi, Ben. (define d c) ((d 'set) 9) Hi, Ben.
participants (1)
-
Kevin S. Millikin