История изменений
Исправление monk, (текущая версия) :
(if (pred? x) *здесь выходим из функции* *тут код*)
Основная проблема: добавляет уровень вложенности
(define (process x)
(if (not (check0 x)) #f
(let ([x1 (process x)])
(if (not (check1 x1)) #f
(let ([x2 (process x1)])
(if (not (check2 x2)) #f x2))))))
Читается как-то не очень... Даже если без let
(define (process x)
(cond
[(not (check0 x)) (warn "check0") #f]
[else
(define x1 (process x))
(cond
[(not (check1 x1)) (warn "check1") #f]
[else
(define x1 (process x))
(if (not (check2 x2))
(begin (warn "check2") #f)
x2)])]))
А проверок может быть и больше (обычно должно быть больше).
Исходная версия monk, :
(if (pred? x) *здесь выходим из функции* *тут код*)
Основная проблема: добавляет уровень вложенности
(define (process x)
(if (not (check0 x)) #f
(let ([x1 (process x)])
(if (not (check1 x1)) #f
(let ([x2 (process x1)])
(if (not (check2 x2)) #f x2))))))
Читается как-то не очень... Даже если без let
(define (process x)
(cond
[(not (check0 x)) (warn "check0") #f]
[else
(define x1 (process x))
(cond
[(not (check1 x1)) (warn "check1") #f]
[else
(define x1 (process x))
(if (not (check2 x2)) (warn "check2") #f x2)])]))
А проверок может быть и больше (обычно должно быть больше).