Désolé, mais elisp n'est pas mon meilleur. J'ai besoin de combiner deux listes de chaînes de cette façon:
("a" "b" "c") + ("d" "e" "f") -> ("a" "b" "c" "d" "e" "f")
Eh bien, la commande n'est pas importante, j'ai donc écrit ce code:
(while lista
(add-to-list 'listb (car lista))
(setq lista (cdr lista)))
Cela fonctionne, mais je me demande s'il y a une fonction qui fait déjà cela.
Un indice? Merci d'avance.
append
est la bonne réponse ici, mais une autre façon (destructrice) de le faire serait(setcdr (last a) b)
.(-concat '(1) '(2 3) '(4)) ;; => '(1 2 3 4)
add-to-list
dans le code Lisp (cela est dit dans la docstring). Utilisez plutôtpush
.Réponses:
Vous pouvez également simplement utiliser append.
la source
(nconc '("a" "b" "c") '("d" "e" "f"))
append
semble mieux ici.cl-concatenate
utiliseappend
lorsque TYPE estlist
, donc les deux réponses produisent le même résultat.Donc pour votre exemple
Puisqu'il est défini dans
cl
vous devrez peut-être d'(require 'cl)
abord, sinon vous pouvez utilisercl-concatenate
ce qui semble être chargé par défaut.De plus, comme souligné par @phils, il
cl-concatenate
suffit d'appelerappend
lorsque TYPE est'list
, voici la source decl-extra.el
:Donc, si vous n'utilisez que des listes, il est plus simple d'utiliser directement
append
, comme l'a souligné @John Kitchin.Enfin, @lawlist a mentionné
nconc
:Qu'est-ce que cela signifie:
la source
(setq l1 '("a" "b" "c") l2 '("d" "e" "f")) (concatenate 'list l1 l2)
fonctionne bien.varname
plutôt que'varname
).seq-concatenate
(après(require 'seq)
), bien que cela à son tour se terminecl-concatenate
.