Exceptions Eli Barzilay 24 Jul 2007 18:00 UTC
I have finally switched the Lazy Scheme implementation in PLT to the implementation that was described here. (Close: it deals with multiple values only in `delay'.) There is, however, a problem with marking a currently-evaluated promise. The straightforward implementation does this: > (define e (delay (+ 1 "2"))) > (force e) +: expects type <number> as 2nd argument, given: "2"; other arguments were: 1 > (force e) force: reentrant promise The same problem exists in existing delay/force implementations (practically every one that I tried): > (define e (delay (list-ref '(1 2 3) (random 6)))) > (force e) error... > (force a) 2 A solution to this is straightforward (given some way to capture and store exceptions), but in many cases (as in mzscheme), catching errors has some run-time cost. This is a problem for implementing a lazy language. Because of this, I'm considering alternatives, like not marking the current node and not doing the update-on-every-step thing. Andre, perhaps you'll think of a better solution? -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://www.barzilay.org/ Maze is Life!