Common Lisp:递归地将x附加到列表中

时间:2009-11-22 11:28:46

标签: list lisp common-lisp

我正在尝试将x添加到列表的每个元素中。 例如:

(queue 3 '(1 2 3))

会给出

((3 1) (3 2) (3 3))

下面的代码显然不符合我的要求。 有什么提示吗?

(defun queue(x y)
 (cond
  ((null y) nil)
  (t (cons x (queue x (rest y)))))) 

2 个答案:

答案 0 :(得分:3)

你在x之前的结果是将队列应用到y的其余部分,而根本不使用y的第一个元素。所以基本上你扔掉y的所有值并用x替换它们。

您想改为(cons (list x (first y)) (queue x (rest y))))))

您当然可以使用map来执行此操作,但我认为这是递归练习。

答案 1 :(得分:3)

你已经得到了递归版本的答案。

以下是使用MAPCAR的常用Lisp方式:

(defun queue (item list)
   (mapcar (lambda (list-element)
              (list item list-element))
           list))