LINUX.ORG.RU

История изменений

Исправление 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)])]))

А проверок может быть и больше (обычно должно быть больше).