LISP列出子列表

时间:2013-12-04 22:04:35

标签: lisp common-lisp

仅删除列表中每个子列表的第一个元素的函数。例如,

测试1:

  • 列表为(10 (1 2 3) (90 100) 122 156)
  • 输出应为:(10 (2 3) (100) 122 156)

我知道如何从列表中删除元素,但我不知道用于从子列表中删除元素的函数

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

又一个提议:没有迭代,使用递归算法。

(defun butfirst (lst)
  (cond
   ((null lst) '())
   ((consp (car lst))
    (cons (cdr (car lst))
          (butfirst (cdr lst))))
   (t (cons (car lst)
            (butfirst (cdr lst))))))