使用 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" 部分条件。