Cond If And Or in Racket

时间:2013-10-24 14:50:49

标签: if-statement lisp scheme racket

有人可以在球拍中为我解释这些功能。我完全迷失了。请帮我举几个例子。谢谢!我无法想象这些功能对我的生活。

3 个答案:

答案 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")