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))

1. kurkuma 18.03.2013 08:54

очень круто!

2. 4dakurkuma /1 18.03.2013 14:29

хуйня на самом деле. хендлер должен быть оторван от контекста, в котором проезошел эксепшон. // хуйню написал на самом деле

Do you really want to delete ?