Entschuldigung, aber elisp ist nicht mein Bestes. Ich muss zwei Listen von Zeichenfolgen auf diese Weise kombinieren:
("a" "b" "c") + ("d" "e" "f") -> ("a" "b" "c" "d" "e" "f")
Nun, die Reihenfolge ist nicht wichtig, also habe ich diesen Code geschrieben:
(while lista
(add-to-list 'listb (car lista))
(setq lista (cdr lista)))
Es funktioniert, aber ich frage mich, ob es eine Funktion gibt, die dies bereits tut.
Irgendeine Ahnung? Danke im Voraus.
append
Hier ist die richtige Antwort, aber ein anderer (destruktiver) Weg wäre es(setcdr (last a) b)
.(-concat '(1) '(2 3) '(4)) ;; => '(1 2 3 4)
add-to-list
in Lisp-Code verwenden (dies steht im Docstring). Verwenden Sie stattdessenpush
.Antworten:
Sie können auch einfach append verwenden.
quelle
(nconc '("a" "b" "c") '("d" "e" "f"))
append
hier scheint es tatsächlich besser zu sein.cl-concatenate
verwendet,append
wenn TYPE istlist
, sodass beide Antworten das gleiche Ergebnis liefern .Also für dein Beispiel
Da es in definiert ist, müssen
cl
Sie möglicherweise(require 'cl)
zuerst, ansonsten können Sie verwenden,cl-concatenate
was standardmäßig geladen zu sein scheint.Wie von @phils hervorgehoben,
cl-concatenate
ruft @phils nur auf,append
wenn TYPE ist'list
. Hier ist die Quelle voncl-extra.el
:Wenn Sie also nur Listen verwenden, ist die direkte Verwendung einfacher
append
, wie von @John Kitchin ausgeführt.Schließlich erwähnte @lawlist
nconc
:Was das bedeutet:
quelle
(setq l1 '("a" "b" "c") l2 '("d" "e" "f")) (concatenate 'list l1 l2)
funktioniert okvarname
lieber als'varname
).seq-concatenate
(after(require 'seq)
) erwähnencl-concatenate
.