Рассмотрим следующий фрагмент
(define (f a b c)
(
cond ((and (< b c) (< b a)) (+ c a))
((and (< a c) (< a b)) (+ c b))
((and (< c b) (< c a)) (+ b a))
)
)
(display (f 2 1 3)) ; 5
(newline)
(display (f 2 8 3)) ; 11
(newline)
(display (f 2 8 -3)) ; 10
Теперь, если я прокомментирую вторую и вторую строку снизу
(define (f a b c)
;(
cond ((and (< b c) (< b a)) (+ c a))
((and (< a c) (< a b)) (+ c b))
((and (< c b) (< c a)) (+ b a))
;)
)
Результат будет
#<undef>
11
10
I не мог объяснить, почему опущенные скобки приводят к такому результату. Во втором случае я ожидал, что компилятор обработает cond ((and (< b c) (< b a)) (+ c a))
, ((and (< a c) (< a b)) (+ c b))
и ((and (< a c) (< a b)) (+ c b))
как три выражения, два последних недопустимы, вместо этого кажется, что они были выполнены.