这是我到目前为止所拥有的:
(defun append-all(x L)
(if (null L)
L
(cons (append (car L) x) (append-all x (cdr L))))
)
)
输出:
(append-all '3 '((1) (2 1) (2)))
((1 . 3) (2 1 . 3) (2 . 3))
想要:
((1 3) (2 1 3) (2 3))
这是一个辅助函数,因此它是一个链表似乎会给我带来问题。
由于
编辑:修复递归调用
答案 0 :(得分:2)
在您的代码中,更改此部分:
(append (car L) x)
对此:
(append (car L) (list x))
以前没有用,因为append
应该收到两个列表作为参数,而不是列表和元素。
答案 1 :(得分:2)
(defun append-all (item list)
"Appends ITEM to each sublist of LIST"
(flet ((circular-list (item)
(let ((list2 (list item)))
(nconc list2 list2))))
(mapcar #'append
list
(circular-list (list item)))))
答案 2 :(得分:1)
如果你不想自己做递归,这也应该有效:
(defun append-all (x L)
(mapcar #'(lambda (l) (append l (list x))) L))
答案 3 :(得分:0)
我正在学习clisp,但它可以工作。
(defun append-all (x L)
(flet (
(append-item (alist) (append alist (list x))))
(mapcar #'append-item L)))
(print (append-all '3 '((1) (2 1) (2))))