How to throw and handle exceptions in the R6RS schema

What is the standard way to throw and catch exceptions in the R6RS circuit? I am looking for syntax that works in any version of Scheme (and not just PLT) that implements R6RS.

The R6RS security syntax looks like it can match the account, but can someone show me an example of how to use it?

+7
exception scheme
source share
1 answer

Semantics guard :

 (guard (exception-object ((condition-1-to-test-exception-object) (action-to-take) ((condition-2-to-test-exception-object) (action-to-take) ((condition-N-to-test-exception-object) (action-to-take) (else (action-for-unknown-exception))) 

There is a helper else clause that we do not use here. The following example models exceptions that can be caused by typical file I / O. We set guard to handle exceptions:

 (define mode 0) (define (open-file) (if (= mode 1) (raise 'file-open-error) (display "file opened\n"))) (define (read-file) (if (= mode 2) (raise 'file-read-error) (display "file read\n"))) (define (close-file) (if (= mode 3) (raise 'file-close-error) (display "file closed\n"))) (define (update-mode) (if (< mode 3) (set! mode (+ mode 1)) (set! mode 0))) (define (file-operations) (open-file) (read-file) (close-file) (update-mode)) (define (guard-demo) (guard (ex ((eq? ex 'file-open-error) (display "error: failed to open file ") (update-mode)) ((eq? ex 'file-read-error) (display "error: failed to read file ") (update-mode)) (else (display "Unknown error") (update-mode))) (file-operations))) 

Testing:

 > (guard-demo) file opened file read file closed > (guard-demo) error: failed to open file > (guard-demo) file opened error: failed to read file > (guard-demo) file opened file read Unknown error > (guard-demo) file opened file read file closed 

There is a detailed description of exception handling with sample code in Chapter 7 of R6RS.

+7
source share

All Articles