Обработка исключений в схеме MIT
Как мне вызвать и обработать исключение в схеме MIT?
Что-то вроде [это не работает]
((< val 0) (raise "-ve value") )
3 ответа
Решение
Лучшее место для поиска - документация схемы MIT/GNU по обработке ошибок.
В документации есть ответ, но нет примеров кода, поэтому вот один из них:
(define (handler x)
(display "Handling Error: ")(display x)(newline)
(restart 1))
Здесь мы просто отображаем ошибку (что в документации называется "условием") и ничего не делаем.
Чтобы эта функция обрабатывала все условия, выполните:
(bind-default-condition-handler '() handler)
Или вы можете просто обернуть один блок кода:
(bind-condition-handler '() handler (3 4))
Как указал dvingo, документы не показывают никакого примера, поэтому вот еще один пример, который использует встроенную специальную форму "error" (по крайней мере, в MIT-схеме):
(define (errors-if-zero x)
(if (= x 0)
(error "x is 0")
x))