List 获取Lisp中多括号列表的第一个元素

List 获取Lisp中多括号列表的第一个元素,list,lisp,common-lisp,List,Lisp,Common Lisp,如果我有以下清单: (((X))) 我只想要X,而不想要括号 在LISP中,如果我使用CAR,我仍然会得到括号 有什么函数可以帮我做到这一点吗?在Common Lisp中,(某个值)是一个包含单个元素的列表,由某个值给出 列表的经典图形表示表明,实际上,单值列表是指向某些值和nil的指针的“cons”(对): 因此,获取它的car会产生一些值,而cdr会产生nil 那么,这个s表达式的含义是什么:((x))?如果用(x)替换第一个示例中的某个值,则得到的正是该值。也就是说,这不是一个“多括号

如果我有以下清单:

(((X)))
我只想要
X
,而不想要括号

在LISP中,如果我使用
CAR
,我仍然会得到括号

有什么函数可以帮我做到这一点吗?

在Common Lisp中,
(某个值)
是一个包含单个元素的列表,由
某个值给出

列表的经典图形表示表明,实际上,单值列表是指向
某些值
nil
的指针的“cons”(对):

因此,获取它的
car
会产生
一些值
,而
cdr
会产生
nil

那么,这个s表达式的含义是什么:
((x))
?如果用
(x)
替换第一个示例中的
某个值
,则得到的正是该值。也就是说,这不是一个“多括号列表”,而是一个包含单个元素的列表,它本身就是一个包含单个元素的列表(换句话说,一个列表中汽车是一个单一元素列表)。如下图所示:

因此,这次要获得
x
,您必须使用
car
两次,编写
(car(car列表))
(实际上,这可以在公共Lisp中缩写为
(caar列表))
(请参阅)


我留给您来完成练习,绘制对应于
((x))
的图表,并找到如何从该列表中提取
x

类似的内容,例如:

(defun first-atom (c)
  (if (consp c)
    (first-atom (first c))
    c)))
这有点错误,因为
(first atom 1)
不是一个错误,它可能应该是:它需要外部检查cons,该cons调用递归局部fn来完成工作。你有什么想法吗



很抱歉,缩进可能有问题:在手机上很难正确操作。

如何创建这些漂亮的图形?@sds,我在Mac上使用了旧版本的OmniGraffle。