使用 Lisp 计算阶乘
Calculating factorial using Lisp
我正在阅读使用 Lisp 计算阶乘的代码示例,如下所示:
(defun fatorial (n)
(cond
((= n 1) 1)
(t (* n (fatorial (- n 1))))))
所以,我想知道此代码示例中的 t
是什么?它在 Lisp 中有什么特殊含义吗?我搜索了但找不到我的答案!
这是 LISP 用于表示 True 的符号。在 LISP 中的 cond
中,末尾的 "catch all" 使用 t
表示如果前面的条件中的 none 评估为 True,则此代码将始终执行。
在这里将其视为等同于 if-else 中的 else
。不过,总的来说,它只是代表了True。
cond 由 cond
符号后跟多个 cond 子句组成,每个子句都是一个列表。 cond 子句的第一个元素是条件;其余元素(如果有的话)是动作。 cond 形式找到第一个条件评估为真(即不评估为 nil)的子句;然后它执行相应的操作和 returns 结果值。
因此,在您的代码中,第一个测试检查 n 是否等于 1,如果是,则 returns 1。另一个以 "t" 开头的子句(在 lisp 中为 true)是"else" 部分条件。
我正在阅读使用 Lisp 计算阶乘的代码示例,如下所示:
(defun fatorial (n)
(cond
((= n 1) 1)
(t (* n (fatorial (- n 1))))))
所以,我想知道此代码示例中的 t
是什么?它在 Lisp 中有什么特殊含义吗?我搜索了但找不到我的答案!
这是 LISP 用于表示 True 的符号。在 LISP 中的 cond
中,末尾的 "catch all" 使用 t
表示如果前面的条件中的 none 评估为 True,则此代码将始终执行。
在这里将其视为等同于 if-else 中的 else
。不过,总的来说,它只是代表了True。
cond 由 cond
符号后跟多个 cond 子句组成,每个子句都是一个列表。 cond 子句的第一个元素是条件;其余元素(如果有的话)是动作。 cond 形式找到第一个条件评估为真(即不评估为 nil)的子句;然后它执行相应的操作和 returns 结果值。
因此,在您的代码中,第一个测试检查 n 是否等于 1,如果是,则 returns 1。另一个以 "t" 开头的子句(在 lisp 中为 true)是"else" 部分条件。