LISP列表子列表

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) (

只删除列表中每个子列表的第一个元素的函数。比如说,

测试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) (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的帖子中学到什么了吗?可能吧,但不像您自己编写一些代码,并试图让这些代码正常工作那样多。