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
。