type-of-animal 函数让我们详细看一下 type-of-animal 函数。
type-of-animal 函数的定义是通过填充两个模板而完成的,一个用于整个函数定义,另一个用于 if 表达式。
每个非交互式函数的模板如下:
(defun name-of-function (argument-list) "documentation…" body…)
符合此模板的函数部分如下:
(defun type-of-animal (characteristic)
"根据 CHARACTERISTIC 在回显区域打印消息。
如果 CHARACTERISTIC 是字符串 \"fierce\",则警告可能是老虎。"
body: the if expression)
函数的名称是 type-of-animal;它接受一个参数的值。参数列表后面是多行文档字符串。在示例中包含文档字符串是一个良好的习惯,建议为每个函数定义都编写文档字符串。函数定义的主体由 if 表达式组成。
if 表达式的模板如下:
(if true-or-false-test
action-to-carry-out-if-the-test-returns-true)
在 type-of-animal 函数中,if 的代码如下:
(if (equal characteristic "fierce")
(message "它是一只老虎!"))
在这里,true-or-false-test 是表达式:
(equal characteristic "fierce")
在 Lisp 中,equal 是一个函数,它确定其第一个参数是否等于第二个参数。第二个参数是字符串 "fierce",第一个参数是符号 characteristic 的值,换句话说,就是传递给该函数的参数。
在 type-of-animal 的第一个示例中,传递了参数 "fierce"。由于 "fierce" 等于 "fierce",表达式 (equal characteristic "fierce") 返回 true。当发生这种情况时,if 会评估 if 的第二个参数或 true 部分:(message "它是一只老虎!")。
另一方面,在 type-of-animal 的第二个示例中,传递了参数 "striped"。"striped" 不等于 "fierce",因此 true 部分不会被评估,if 表达式返回 nil。