0

有人可以在球拍中为我解释这些功能吗?我完全迷路了。请帮我举一些例子。谢谢!我只是无法为我的生活弄清楚这些功能。

4

3 回答 3

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
于 2013-10-24T15:02:33.297 回答
0

If是旋转运算符。它有三个参数,除非第一个参数有值,#f否则它将返回第二个参数的值,否则返回第三个参数的值。

OR接受一个或多个参数,从左到右一次计算一个,如果发现不是#f,则返回第一个值,#f如果没有参数满足该条件,则返回。

AND接受一个或多个参数,从左到右一次评估一个,如果它找到一个#f它返回#f,否则它返回它评估的最后一个参数的值。

COND接受一个或多个参数,每个参数都有一个或多个子参数(虽然 2 是通常的数字)。它通过评估第一个子参数一次从左到右评估每个参数。如果不是,#f则它按顺序评估其余的每个子参数(如果有)并返回最后一个参数的值。否则,它会移动到下一个参数并以相同的方式对其进行评估。else 是这些子参数中的特殊语法,始终被视为不是#f.

这里的参数被理解为任何有效的 s 表达式。

于 2013-10-24T15:06:28.963 回答
0

注意:如果您熟悉非 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")
于 2013-10-24T15:11:32.097 回答