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
。