我正在做家庭作业,第一个函数让我做一些事情,比如删除列表的给定元素,或者显示列表的给定元素。下一个功能要我删除嵌套列表,或显示它们。您是否有使用嵌套列表的一般提示?我想这些函数将与我之前编写的函数非常相似,只是稍微调整一下。
这是我到目前为止写的两个函数示例。注意我必须使用“cond”风格的写作功能。
(defun delnth(L A)
(cond ((= A 1) (rest L))
(t (cons (first L) (delnth (rest L) (- A 1))))))
(defun remv(A L)
(cond ((eq A (first L)) (remv A (rest L)))
((null L) nil)
(t (cons (first L) (remv A (rest L) )))))
答案 0 :(得分:1)
您的两个函数都可以使用嵌套的cons
。 '(1 2 3)
是(1 . (2 . (3 . ()))
和(cons 1 (cons 2 (cons 3 '())))
。嵌套列表是您在cons
的{{1}}中嵌套car
。例如。 cons
。
能够看到((1 . ()) . ()) ; ==> ((1))
并了解它是((1) (2 3))
非常重要,这样如果您想要访问((1 . ()) . ((2 . (3 . ())) . ()))
,显然路径为d,a,d,a和in相反,您可以构建访问者3
。
cadadr
部分中cons
的{{1}}是树。当您创建一个遍历树的函数时,如果它们是cons
,您需要同时移动car
和car
。因此:
cdr
组合器不需要缩减为原子:
cons