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

リストと要素ではなく、パラメータとして2つのリスト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 に答える