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]
答案 0 :(得分:8)
未定义具有5个或更多a和d的函数。只有4个或更少。这个长度有太多可能的功能,因为它是实用的。
你必须拼写出来:
(car (cdr (cdr (cdr (cdr (car x))))))
答案 1 :(得分:2)
嗯,根据错误消息,没有cadddar
函数。请记住,car
和cdr
是原始列表读取功能。像caddar
这样的其他内容是由一个或多个car
和cdr
组合而成的便捷功能。也就是说,只有car
和cdr
如果caddar
等不存在,您就可以执行列表操作,扩展函数只会让您的生活更轻松。
因此,解决此问题的方法是使用cadddar
和car
合成您自己的cdr
。如果没有立即明白如何执行此操作,请启动更简单(例如,cadr
或cdar
)并构建到cadddar
。
答案 2 :(得分:1)
(first (last (first '(((1 2) 3 4 5) ((6 7) 8 9 10)))))
-> 5
答案 3 :(得分:1)
标准没有定义超过4 a
和d
s的函数,可能是因为它们中有32个[并且从那时起它呈指数级杂乱]。
获取列表最后一个元素的可靠方法:last
返回最后一个cons单元格,所以
(car (last list))
为您提供最后一个列表元素。当然,list
可以是(first list)
。