4da
18.03.2013 00:13 darkstar1
На лоре спросили:
/можно ли написать на Racket такую функцию, чтобы внутри неё (в её динамическом окружении) делений на 0 возвращало 0, а не прерывало вычисления/
Короче, да:
(define-syntax-rule (try-or-zero body ...)
(let/cc k (with-handlers ([exn? (λ _ (k 0))])
body ...)))
(define (testl l)
(if (null? l)
'()
(cons (try-or-zero (/ 1 (car l)))
(testl (cdr l)))))
(testl '(1 2 3 0 5))
очень круто!
хуйня на самом деле. хендлер должен быть оторван от контекста, в котором проезошел эксепшон. // хуйню написал на самом деле