On Tuesday, December 30, 2003 3:10 PM, Ben Rudiak-Gould [SMTP:[EMAIL PROTECTED] 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. _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell