递归地从LISP中的列表中获取数据

时间:2012-03-23 11:54:19

标签: list recursion lisp

LISP列表L1和L2由随机字母数字字符组成。

Appliyng递归(和变量收集器)通过从L1和字符中取数字从L2生成列表L3

示例:

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

Result: 
L3= (1 5 6 8 t)

你知道怎么做吗?

2 个答案:

答案 0 :(得分:1)

听起来像是家庭作业,但这就是我用循环

的方式
(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)))

答案 1 :(得分:1)

由于已经回答了这个问题,所以这里有一个替代方法,有点简短:

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