我很难理解 and
+ cond
Racket中的函数。为什么下面的两个函数会有不同?
功能 a:
(define (test? function)
(and (list? function) (>= (length function) 1)))
职能: b:
(define (test?function )
(cond [(and (list? function))
(>= (length function) 1) ]))
在我的理解中,这基本上意味着:
(if (list? function)
return true;(if (>= (length function) 1)
返回true。这和函数 a. 我的理解有误吗?
我不明白它们之间有什么不同。请解释一下。是不是可以写函数 a 与 cond
if
?
首先是, cond
和 and
不是函数,而是 "特殊形式"(以宏形式实现)。语法中的 cond
表达式的语法与函数调用的语法不同。句法是一个 and
表达式与函数调用的表达式相同,但是 and
不一定能评价所有的论点。
这里有一种重写你的 test?
函数,使用 cond
. (我还把参数的名字从原来的 function
到 x
因为它看起来不像一个函数)。)
(define (test? x)
(cond [(and (list? x) (>= (length x) 1))
#t]
[else
#f]))
一般来说,只要你有一个布尔表达式 expr
你可以换成 (cond [expr #t] [else #f])
或 (if expr #t #f)
. 但通常这样做是没有意义的。
下面是函数的另一种写法。(and condition1 condition2)
和这个函数的意思是一样的 (cond [condition1 condition2] [else #f])
所以你可以把函数写成这样。
(define (test? x)
(cond [(list? x)
(>= (length x) 1)]
[else
#f]))
一般来说,这个函数的原始版本是最好的。
(define (test? x) (and (list? x) (>= (length x) 1)))