if详细说明

在Lisp中,if表达式不使用单词“then”;测试和动作是列表的第二个和第三个元素,其第一个元素是if。尽管如此,if表达式的测试部分通常称为if-part,第二个参数通常称为then-part

此外,当编写if表达式时,通常将真假测试写在与符号if相同的行上,但如果测试为真,则执行的操作,即then-part,会写在第二行及后续行。这样可以使if表达式更易读。

(if true-or-false-test
    action-to-carry-out-if-test-is-true)

真假测试将是由Lisp解释器评估的表达式。

以下是一个您可以按照通常方式评估的示例。测试是数字5是否大于数字4。由于是,将打印消息‘5 is greater than 4!’。

(if (> 5 4)                             ; if-part
    (message "5 is greater than 4!"))   ; then-part

(函数>测试其第一个参数是否大于其第二个参数,并在其为真时返回true。)

当然,在实际使用中,if 表达式中的测试将不会像表达式 (> 5 4) 中那样永远固定。相反,测试中至少一个变量将被绑定到一个预先未知的值。 (如果值在预先知道,我们就不需要运行测试了!)

例如,该值可以绑定到函数定义的参数上。在以下函数定义中,动物的特性是传递给函数的值。如果绑定到 characteristic 的值是 "fierce",则将打印消息 ‘It is a tiger!’;否则,将返回 nil

(defun type-of-animal (characteristic)
  "根据 CHARACTERISTIC 在回显区打印消息。
如果 CHARACTERISTIC 是字符串 \"fierce\",
则警告是一只老虎。"
  (if (equal characteristic "fierce")
      (message "It is a tiger!")))

如果您正在 GNU Emacs 中阅读此文档,您可以按照通常的方式评估函数定义以在 Emacs 中安装它,然后可以评估以下两个表达式以查看结果:

(type-of-animal "fierce")

(type-of-animal "striped")

当您评估 (type-of-animal "fierce") 时,您将在回显区看到打印的以下消息:"It is a tiger!";当您评估 (type-of-animal "striped") 时,您将在回显区看到打印的 nil