Re: Doubt about evaluating code
Andreas Bernauer <[email protected]> Sun, 16 Oct 2005 18:49:24 +0200
| Newsgroups | gmane.lisp.scheme.scsh |
|---|---|
| Message-ID | <[email protected]> |
On 10/15/05, Gautham Anil <[email protected]> wrote: > I am doing some Genetic Programming in scsh. I need to evaluate many > randomly generated codes. The program must continue gracefully with the > next piece of generated code in the common case that the current piece > does not compile. > > How do I do this? As I see, all errors in the code causes the shell to > show up. Also, there is no srfi-12 support. So, how this can be done? You could use code from SUnet (http://sourceforge.net/projects/sunet): from file scheme/httpd/surfles/handle-fatal.scm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Error-Handler ;; ;; Adopted from WITH-FATAL-ERROR-HANDLER, but handles everything that ;; is catchable. We must catch everything because we also want ;; exceptions (and warnings) to be catched (e.g. when the surflet is ;; loaded.) (define (with-fatal-handler* handler thunk) (call-with-current-continuation (lambda (accept) ((call-with-current-continuation (lambda (k) (with-handler (lambda (condition more) (call-with-current-continuation (lambda (decline) (k (lambda () (handler condition decline))))) (more)) ; Keep looking for a handler. (lambda () (call-with-values thunk accept))))))))) (define-syntax with-fatal-handler (syntax-rules () ((with-fatal-handler handler body ...) (with-fatal-handler* handler (lambda () body ...))))) So you say something like (with-fatal-handler (lambda (condition decline) ;;; Your code goes here. If you don't want to handle the condition, call (decline). ) (try-this-function)) Cheers, Andreas Bernauer.