有人能给我解释一下这段代码的功能和工作原理吗?

(defun f (&optional (x nil) (y (if (atom x) nil (car x))))
 (cond ((atom x) y)
       ((< (car x) y) (f (cdr x) y))
       (t (f (cdr x) (car x)))))

最佳答案

对代码的快速浏览显示,它是一个函数,返回给定两个数字或一个数字列表的最大数字如果给定一个原子,则返回nil;如果列表中的某个元素不是数字,则返回error。
以下是我得到的一些结果:
CL-USER> (f '(1 2 3 4))4CL-USER> (f '(1 5 2 4))5CL-USER> (f '(1 5 2 4 7))7CL-USER> (f 'y)NILCL-USER> (f 3 'y)Y
当列表中有非数字时,将出现类型错误:
CL-USER> (f '(1 x 2 4 7))
给出以下错误
价值

不是类型
数字
绑定SB-KERNEL时::X
[类型错误的条件]
至于它是怎么工作的函数比较列表中的数字、第一个参数和第二个参数,并返回其中最大的一个它递归地比较列表的前两个数字,返回与列表的其余部分比较的较大数字。

关于lisp - 常见的LISP代码说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44394922/

10-12 07:33