有人可以在球拍中为我解释这些功能吗?我完全迷路了。请帮我举一些例子。谢谢!我只是无法为我的生活弄清楚这些功能。
3 回答
首先,如果:
(if (positive? 1) 1 -1)
Racket 首先评估 1 是否为正(这是第一个表达式(正?1))。如果是,则返回 1,否则,返回 -1。这等效于类似 c 的语言:
if ( positive?(1))
return 1
else
return -1
Cond 基本上是一个如果有多个选项。类 C 语言中的等价物是 else-if
(cond [(first-condition) (what-to-do)]
[(second-condition) (what-to-do)]
[(third-condition) (you-get-the-idea)])
And 和 Or 只是逻辑运算符,相当于 && 和 || 在类 C 语言中
(and true true) => true
(and true false) => false
(or true true) => true
(or true false) => true
(or false false) => false
If
是旋转运算符。它有三个参数,除非第一个参数有值,#f
否则它将返回第二个参数的值,否则返回第三个参数的值。
OR
接受一个或多个参数,从左到右一次计算一个,如果发现不是#f
,则返回第一个值,#f
如果没有参数满足该条件,则返回。
AND
接受一个或多个参数,从左到右一次评估一个,如果它找到一个#f
它返回#f
,否则它返回它评估的最后一个参数的值。
COND
接受一个或多个参数,每个参数都有一个或多个子参数(虽然 2 是通常的数字)。它通过评估第一个子参数一次从左到右评估每个参数。如果不是,#f
则它按顺序评估其余的每个子参数(如果有)并返回最后一个参数的值。否则,它会移动到下一个参数并以相同的方式对其进行评估。else
是这些子参数中的特殊语法,始终被视为不是#f
.
这里的参数被理解为任何有效的 s 表达式。
注意:如果您熟悉非 lisp 语言,这就是您的答案。我不想用其他代码以外的方式来解释它们。但是,其他答案确实如此,因此这只是一个补充。
这些都不是函数,而是特殊形式。
(if predicate
consequent
alternative)
很像阿尔戈方言if
if( predicate )
{
consequent
}
else
{
alternative
}
请注意,谓词、结果和替代可以是从复杂表达式到简单值的任何内容。
cond
更像是 if, elseif..., else:
(cond (predicate1 consequent1)
(predicaten consequentn)
(else alternative))
and
就像&&
在 algol 方言中一样工作。因此false && print("Do it!")
不会打印任何东西,因为它会短路。
(and #f (display "Do it!")) ; ==> #f (and does not display anything since first term was false)
(and 1 2 3) ; ==> 3 (3 is the last true value. In Scheme everything except #f is true.)
or
就像||
在 algol 方言中一样工作。因此true || print("Do it!")
不会打印,因为第一个术语是正确的。
(or 'mama (display "Do it")) ; ==> mama (first true value, does not print "do it")