2

这是我到目前为止所拥有的:

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

这是一个辅助函数,所以它是一个链表这一事实似乎给我带来了问题。

谢谢

编辑:固定递归调用

4

4 回答 4

2

在您的代码中,更改此部分:

(append (car L) x)

对此:

(append (car L) (list x))

它以前不起作用,因为append应该接收两个列表作为参数,而不是列表和元素。

于 2013-01-22T22:08:08.717 回答
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)))))
于 2013-01-22T22:52:50.843 回答
1

如果您不想自己进行递归,这也应该有效:

(defun append-all (x L)
  (mapcar #'(lambda (l) (append l (list x))) L))
于 2013-01-22T22:19:09.343 回答
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))))
于 2013-01-25T03:18:07.560 回答