Рекурсивно получать данные из списков в LISP - PullRequest
0 голосов
/ 23 марта 2012

Списки LISP L1 и L2 составлены из случайных буквенно-цифровых символов.

Прикладная рекурсия (и сборщик переменных) генерирует список L3, беря числа из L1 и символы из L2

Пример:

L1 = (1 a f 5 6 8)
L2 = (3 t 4 5 3 2)

Result: 
L3= (1 5 6 8 t)

Вы знаете, как это сделать?

Ответы [ 2 ]

1 голос
/ 24 марта 2012

Поскольку на этот вопрос уже дан ответ, есть альтернатива, более короткий способ сделать это:

(defparameter *l1* '(1 a f 5 6 8))
(defparameter *l2* '(3 t 4 5 3 2))

(append (delete-if #'symbolp *l1*)
    (delete-if #'numberp *l2*)) ; (1 5 6 8 t)
1 голос
/ 23 марта 2012

Звучит как домашнее задание, но вот как я могу это сделать с помощью цикла

(loop for i in L1 
      and j in L2
      if (numberp i)
         collect i into x
      if (symbolp j)
         collect j into y
      finally (return (append x y)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...