有人可以在球拍中为我解释这些功能。我完全迷失了。请帮我举几个例子。谢谢!我无法想象这些功能对我的生活。
答案 0 :(得分:3)
首先,如果:
(if (positive? 1) 1 -1)
球拍首先评估1是否为正(这是第一次表达(正数?1))。如果是,则返回1,否则返回-1。这相当于类似c语言:
if ( positive?(1))
return 1
else
return -1
Cond基本上是一个if有多个选项。 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
答案 1 :(得分:0)
If
是迂回运营商。它有三个参数,除非第一个参数的值为#f
,否则它将返回第二个参数的值,否则返回第三个参数的值。
OR
接受一个或多个参数,从左到右一次计算一个参数,如果找不到#f
则返回第一个值,如果没有参数则返回#f
满足那个条件。
AND
接受一个或多个参数从左到右一次评估它们,如果它找到一个#f
它返回#f
,否则它返回最后一个的值它评估的论点。
COND
接受一个或多个参数,每个参数都有一个或多个子参数(2是通常的数字)。它通过评估第一个子参数,一次评估一个从左到右的每个参数。如果它不是#f
,那么它按顺序评估其余的每个子参数(如果有的话),并返回最后一个参数的值。否则它会移动到下一个参数并以相同的方式对其进行求值。 else
是这些子参数中的特殊sytax,始终被视为不是#f
。
这里的论证被理解为任何有效的s表达式。
答案 2 :(得分:0)
注意:如果您熟悉非lisp语言,这就是您的答案。我不是试图以其他方式解释它们而不是其他代码。但是其他答案也是如此,这只是一个补充。
这些都不是功能,而是特殊形式。
(if predicate
consequent
alternative)
非常像Algol方言if
if( predicate )
{
consequent
}
else
{
alternative
}
请注意,谓词,结果和替代可以是从复杂表达式到简单值的任何内容。
cond
更像是if,elseif ......,否则:
(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")