用Lisp计算阶乘

用Lisp计算阶乘,lisp,common-lisp,Lisp,Common Lisp,我正在阅读一个使用Lisp计算阶乘的代码示例,如下所示: (defun fatorial (n) (cond ((= n 1) 1) (t (* n (fatorial (- n 1)))))) 所以,我想知道在这个代码示例中,t是什么?它在Lisp中有什么特殊意义吗?我搜索了一下,但找不到我的答案 这就是LISP用来表示True的符号。在LISPs中的cond中,末尾的“catch all”使用t表示,如果前面的任何条件的计算结果都不为True,则此代码将始终执行 这里将

我正在阅读一个使用Lisp计算阶乘的代码示例,如下所示:

(defun fatorial (n)
  (cond
    ((= n 1) 1)
    (t (* n (fatorial (- n 1))))))

所以,我想知道在这个代码示例中,
t
是什么?它在Lisp中有什么特殊意义吗?我搜索了一下,但找不到我的答案

这就是LISP用来表示True的符号。在LISPs中的
cond
中,末尾的“catch all”使用
t
表示,如果前面的任何条件的计算结果都不为True,则此代码将始终执行


这里将其视为if-else中的
else
。但是,总的来说,它只是表示正确。

一个cond由
cond
符号和许多cond子句组成,每个cond子句都是一个列表。cond子句的第一个元素是条件;其余元素(如果有)是操作。第二个表单查找条件值为true的第一个子句(即,不计算为nil);然后执行相应的操作并返回结果值


因此,在您的代码中,firs测试检查n是否等于1,如果是,则返回1。另一个子句,以“t”(在lisp中为true)开头,是条件的“else”部分。

我猜您将函数命名为
fatorial
,因为它会导致
fat
堆栈占用空间。猜错了!在西班牙语中,Factorial是这样写的:Fatorial!;)