首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最后一个元素的LISP汽车?

最后一个元素的LISP汽车?
EN

Stack Overflow用户
提问于 2010-11-19 12:52:35
回答 4查看 1.9K关注 0票数 2

LISP再一次难倒了我...为什么我不能获取列表中最后一个元素的值?我有一个类似下面的列表:

代码语言:javascript
复制
(setq bar '(((1 2) 3 4 5)((6 7) 8 9 10)))

现在,我得到的返回值为4:

代码语言:javascript
复制
(caddar bar)

有(5)的返回值:

代码语言:javascript
复制
(cdddar bar)

但是我得不到5分,因为:

代码语言:javascript
复制
(cadddar bar)

为什么会这样--我如何得到5的值?

错误:

代码语言:javascript
复制
; Warning: This function is undefined:
;   CADDDAR

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

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-19 12:57:35

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

你只需要把它拼写出来:(car (cdr (cdr (cdr (cdr (car x))))))

票数 8
EN

Stack Overflow用户

发布于 2010-11-19 12:56:59

根据错误消息,没有cadddar函数。请记住,carcdr是基本的列表读取函数。像caddar这样的其他函数是由一个或多个carcdr的组合构建而成的方便函数。也就是说,如果caddar等不存在,你可以只用carcdr就可以很好地执行列表操作,扩展的函数只会让你的工作更轻松一点。

因此,解决这个问题的方法是使用carcdr合成您自己的cadddar。如果不清楚如何做到这一点,可以从simplier开始(比如说,使用cadrcdar),然后构建到cadddar

票数 2
EN

Stack Overflow用户

发布于 2010-11-19 16:35:25

代码语言:javascript
复制
(first (last (first '(((1 2) 3 4 5) ((6 7) 8 9 10)))))

-> 5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4222190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档