我正在尝试将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))))))
答案 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))