2013-12-04 2 views
-1

Функция, которая удаляет только первый элемент каждого подсписок в списке. Например,LISP Списки подсети

Тест 1:

  • Список является (10 (1 2 3) (90 100) 122 156)
  • Вывод должен быть: (10 (2 3) (100) 122 156)

Я знаю, как удалить элемент из списка, но я не знаю, какой функция используется для удаления элемента из подписок

+0

Деструктивно удаляться из существующего списка или возвращать новый список с отсутствующими элементами? – uselpa

+0

вернуть новый список с теми элементами, которые отсутствуют, так как первый элемент для каждого подсети должен быть удален – Extol

+0

(1 (2 3 4) 5 (6 8 10) 9) вид должен выглядеть как (1 (3 4) 5 (8 10) 9) – Extol

ответ

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) 
+0

Большое спасибо i m вид новичка в мире lisp ... могу я спросить вас! Больше? – Extol

+1

Extol, это полезно, если у вас возникла проблема, чтобы выяснить, что вы * можете сделать, и что вы не можете. Код полезен для этого. Вы узнали что-нибудь из почты Усельпы? Возможно, но не так, как если бы вы сами написали код, и попытались заставить этот код работать. – zck

0

еще одно предложение: без итерации, с рекурсивным алгоритмом.

(defun butfirst (lst) 
    (cond 
    ((null lst) '()) 
    ((consp (car lst)) 
    (cons (cdr (car lst)) 
      (butfirst (cdr lst)))) 
    (t (cons (car lst) 
      (butfirst (cdr lst)))))) 
Смежные вопросы