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]发布于 2010-11-19 12:57:35
没有定义具有5个或更多a和d的函数。只有4个或更少。这种长度的函数有太多的可能,因此它是实用的。
你只需要把它拼写出来:(car (cdr (cdr (cdr (cdr (car x))))))
发布于 2010-11-19 12:56:59
根据错误消息,没有cadddar函数。请记住,car和cdr是基本的列表读取函数。像caddar这样的其他函数是由一个或多个car和cdr的组合构建而成的方便函数。也就是说,如果caddar等不存在,你可以只用car和cdr就可以很好地执行列表操作,扩展的函数只会让你的工作更轻松一点。
因此,解决这个问题的方法是使用car和cdr合成您自己的cadddar。如果不清楚如何做到这一点,可以从simplier开始(比如说,使用cadr或cdar),然后构建到cadddar。
发布于 2010-11-19 16:35:25
(first (last (first '(((1 2) 3 4 5) ((6 7) 8 9 10)))))
-> 5https://stackoverflow.com/questions/4222190
复制相似问题