LISP车的最后一个元素?

时间:2010-11-19 04:52:35

标签: lisp warnings clisp

LISP又把我弄糊涂......为什么我不能得到列表中最后一个元素的值?我有一个与此类似的列表:

(setq bar '(((1 2) 3 4 5)((6 7) 8 9 10)))

现在我获得了4的回报:

(caddar bar)

(5)返回:

(cdddar bar)

但我不能得到5:

(cadddar bar)

为什么这样 - 以及如何获得5的值?

错误:

; Warning: This function is undefined:
;   CADDDAR

Error in KERNEL:%COERCE-TO-FUNCTION:  the function CADDDAR is undefined.
[Condition of type UNDEFINED-FUNCTION]

4 个答案:

答案 0 :(得分:8)

未定义具有5个或更多a和d的函数。只有4个或更少。这个长度有太多可能的功能,因为它是实用的。

你必须拼写出来: (car (cdr (cdr (cdr (cdr (car x))))))

答案 1 :(得分:2)

嗯,根据错误消息,没有cadddar函数。请记住,carcdr是原始列表读取功能。像caddar这样的其他内容是由一个或多个carcdr组合而成的便捷功能。也就是说,只有carcdr如果caddar等不存在,您就可以执行列表操作,扩展函数只会让您的生活更轻松。

因此,解决此问题的方法是使用cadddarcar合成您自己的cdr。如果没有立即明白如何执行此操作,请启动更简单(例如,cadrcdar)并构建到cadddar

答案 2 :(得分:1)

(first (last (first '(((1 2) 3 4 5) ((6 7) 8 9 10)))))

-> 5

答案 3 :(得分:1)

标准没有定义超过4 ad s的函数,可能是因为它们中有32个[并且从那时起它呈指数级杂乱]。

获取列表最后一个元素的可靠方法:last返回最后一个cons单元格,所以

(car (last list))

为您提供最后一个列表元素。当然,list可以是(first list)