Desculpe, mas elisp não é o meu melhor. Preciso combinar duas listas de strings dessa maneira:
("a" "b" "c") + ("d" "e" "f") -> ("a" "b" "c" "d" "e" "f")
Bem, a ordem não é importante, então eu escrevi este código:
(while lista
(add-to-list 'listb (car lista))
(setq lista (cdr lista)))
Funciona, mas estou me perguntando se existe uma função que já faça isso.
Qualquer pista? Desde já, obrigado.
append
é a resposta correta aqui, mas outra maneira (destrutiva) de fazer isso seria(setcdr (last a) b)
.(-concat '(1) '(2 3) '(4)) ;; => '(1 2 3 4)
add-to-list
no código Lisp (diz isso na documentação). Em vez disso, usepush
.Respostas:
Você também pode usar anexar.
fonte
(nconc '("a" "b" "c") '("d" "e" "f"))
append
parece melhor aqui.cl-concatenate
usaappend
quando TYPE élist
, então ambas as respostas estão produzindo o mesmo resultado.Então, para o seu exemplo
Como está definido,
cl
você pode precisar(require 'cl)
primeiro, caso contrário, você pode usar ocl-concatenate
que parece ser carregado por padrão.Além disso, como apontado por @phils
cl-concatenate
apenas chamaappend
quando TYPE é'list
, aqui está a fonte decl-extra.el
:Portanto, se você estiver usando apenas listas, é mais fácil usar diretamente
append
, como apontado por @John Kitchin.Por fim, o @lawlist mencionou
nconc
:O que isto significa:
fonte
(setq l1 '("a" "b" "c") l2 '("d" "e" "f")) (concatenate 'list l1 l2)
funciona ok.varname
mais do que'varname
).seq-concatenate
(depois(require 'seq)
), embora isso, por sua vez, apenas envolvacl-concatenate
.