bevan@cs.man.ac.uk (Stephen J Bevan) (03/29/91)
What is the general style used to write exceptions and their handlers in Scheme? By exceptions I mean facilities similar to catch/throw in Lisp. The ways I can see of doing it are :- 1) Pass a success and fail continuation to every function. 2) Pass multiple continuations, one for each error to be handled. 3) Call a function that is assumed to be set by the user e.g. (define (foo x y z) ... (if (some-unexpected-error) (unexpected-error-exception args) ...)) where `unexpected-end-of-file-exception' as a default just aborts. It would be up the user to re-define this as appropriate. I guess the easiest way of doing this would be via fluid-let e.g. :- (fluid-let ((unexpected-error-exception (lambda x (do-something-sensible x)))) (foo an-arg another-arg yet-another-arg)) However, as fluid-let isn't part of the standard (as far as I'm aware), this solution isn't portable. So some questions :- * Are there better mechanisms that those above? * Any opinons as to which is the best? * Am I totally of course trying to use exceptions in Scheme? All answers greatefully received. Stephen J. Bevan bevan@cs.man.ac.uk