Function 在球拍中与'cond'和'and'一起使用

Function 在球拍中与'cond'和'and'一起使用,function,conditional-statements,racket,Function,Conditional Statements,Racket,我很难理解球拍中的和+cond功能。为什么以下两个功能彼此不同 职能a: 职能b: 在我的理解中,这基本上意味着 (if(list?函数)返回true (如果(>=(长度函数)1)返回true 这和函数a差不多。我的理解有错吗 我不明白它们之间有什么不同。请解释一下。如果,,,的话,用cond写函数a不可能吗?首先,cond和和不是函数,它们是“特殊形式”(作为宏实现)。cond表达式的语法与函数调用的语法不同。和表达式的语法与函数调用的语法相同,但和不一定计算其所有参数 这里有一种使用co

我很难理解球拍中的
+
cond
功能。为什么以下两个功能彼此不同

职能a:

职能b:

在我的理解中,这基本上意味着

  • (if(list?函数)
    返回true
  • (如果(>=(长度函数)1)
    返回true
这和函数a差不多。我的理解有错吗


我不明白它们之间有什么不同。请解释一下。如果
的话,用
cond
写函数a不可能吗?

首先,
cond
不是函数,它们是“特殊形式”(作为宏实现)。cond
表达式的语法与函数调用的语法不同。
表达式的语法与函数调用的语法相同,但
不一定计算其所有参数

这里有一种使用
cond
重写
测试?
函数的方法(我还将参数从
function
重命名为
x
,因为它看起来不像函数。)

一般来说,只要你有一个布尔表达式
expr
,你就可以用
(cond[expr\t][else\f])
(if-expr\t\f)
来替换它。但是这样做通常没有意义

下面是编写函数的另一种方法:
(和条件1条件2)
的意思与
(cond[condition1条件2][else#f])
相同,因此您可以这样编写函数:

(define (test? x)
  (cond [(list? x)
         (>= (length x) 1)]
        [else
         #f]))
但是,通常认为函数的原始版本是最好的:

(define (test? x) (and (list? x) (>= (length x) 1)))

首先,
cond
不是函数,它们是“特殊形式”(作为宏实现)。cond
表达式的语法与函数调用的语法不同。
表达式的语法与函数调用的语法相同,但
不一定计算其所有参数

这里有一种使用
cond
重写
测试?
函数的方法(我还将参数从
function
重命名为
x
,因为它看起来不像函数。)

一般来说,只要你有一个布尔表达式
expr
,你就可以用
(cond[expr\t][else\f])
(if-expr\t\f)
来替换它。但是这样做通常没有意义

下面是编写函数的另一种方法:
(和条件1条件2)
的意思与
(cond[condition1条件2][else#f])
相同,因此您可以这样编写函数:

(define (test? x)
  (cond [(list? x)
         (>= (length x) 1)]
        [else
         #f]))
但是,通常认为函数的原始版本是最好的:

(define (test? x) (and (list? x) (>= (length x) 1)))

我的答案最初有一个输入错误:我省略了
=
的第二个参数,因此函数实际上没有检查长度是否至少为1。我编辑了我的答案以修复它。我的答案最初有一个输入错误:我省略了
=
的第二个参数,因此函数实际上没有检查长度是否至少为1。我编辑了m你为什么认为两者不同?你有证据吗?你为什么认为两者不同?你有证据吗?
(define (test? x) (and (list? x) (>= (length x) 1)))