Scheme 省略cond中的括号会导致奇怪的结果

Scheme 省略cond中的括号会导致奇怪的结果,scheme,Scheme,考虑以下代码段 (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 (

考虑以下代码段

(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
(定义(f a b c)
(
条件((和(
现在如果我评论第二行和底部的第二行

(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))
   ;) 
)
(定义(f a b c)
;(
条件((和(
结果是

#<undef>
11
10
#
11
10

我无法解释为什么省略括号会导致这样的结果。在第二种情况下,我希望编译器将
cond((和(
((和(
((和(
视为三个表达式,后两个表达式无效,相反,它们似乎被执行了。

通常
cond
关键字在解释时会引发异常

但是,如果您的解释器没有抛出任何错误,那么您的情况就是block语句,在block语句中,最后一个表达式的求值提供了结果,其他表达式只计算副作用。代码简化为:

(define (f a b c)  ((and (< c b) (< c a)) (+ b  a))))
(定义(f a b c)((和(
我们不知道您运行的是哪个方案版本,但我的方案版本会抛出一个错误,没有括号的孤独的
cond
会导致立即的
cond:cond中的语法错误。我使用了名为
BiwaScheme解释器版本0.6.4
中的一个。谢谢,现在它似乎不是一个好的解释器,它永远都不是有效的代码,因为
(and(<…)(<…)
#t
#f
,而不是一个函数。@tfb(and…)一直都是布尔值?不,您不在这里的#C…@allinsure
(and…
可能不是布尔值,但
(and(<…)(<…)
是,因为
(<…)
总是返回布尔值。这就是为什么我在我的评论中明确指出了这一点。我不知道C中的规则是什么。@tfb((和(