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。