LISP列表子列表
只删除列表中每个子列表的第一个元素的函数。比如说, 测试1:LISP列表子列表,lisp,common-lisp,Lisp,Common Lisp,只删除列表中每个子列表的第一个元素的函数。比如说, 测试1: 列表是(10(1 2 3)(90 100)122 156) 输出应为:(10(23)(100)122 156) 我知道如何从列表中删除元素,但不知道使用哪个函数从子列表中删除元素。还有一个好处:无需迭代,使用递归算法 (defun butfirst (lst) (mapcar (lambda (e) (if (consp e) (cdr e) e)) lst)) (butfirst '(10 (1 2 3) (
- 列表是
(10(1 2 3)(90 100)122 156)
- 输出应为:
(10(23)(100)122 156)
我知道如何从列表中删除元素,但不知道使用哪个函数从子列表中删除元素。还有一个好处:无需迭代,使用递归算法
(defun butfirst (lst)
(mapcar
(lambda (e) (if (consp e) (cdr e) e))
lst))
(butfirst '(10 (1 2 3) (90 100) 122 156))
=> (10 (2 3) (100) 122 156)
(defun butfirst (lst)
(cond
((null lst) '())
((consp (car lst))
(cons (cdr (car lst))
(butfirst (cdr lst))))
(t (cons (car lst)
(butfirst (cdr lst))))))
在现有列表中进行破坏性删除,或者返回一个缺少这些元素的新列表?返回缺少这些元素的新列表,就像每个子列表的第一个元素应该被删除一样(1(2 3 4)5(6 8 10)9)out应该看起来像(1(3 4)5(8 10)9)非常感谢我是lisp世界中的一个新手…我可以问你吗!更多?赞美,如果你有问题,找出你能做什么和不能做什么是很有用的。代码对此很有帮助。你从uselpa的帖子中学到什么了吗?可能吧,但不像您自己编写一些代码,并试图让这些代码正常工作那样多。