concatenate é um alias para 'cl-concatenate' em 'cl.el'.
(concatenar a SEQUÊNCIA DE TIPO ...)
Concatene, em uma sequência do tipo TYPE, o argumento SEQUENCEs.
Então, para o seu exemplo
(concatenate 'list '("a" "b" "c") '("d" "e" "f"))
Como está definido, cl
você pode precisar (require 'cl)
primeiro, caso contrário, você pode usar o cl-concatenate
que parece ser carregado por padrão.
Além disso, como apontado por @phils cl-concatenate
apenas chama append
quando TYPE é 'list
, aqui está a fonte de cl-extra.el
:
(defun cl-concatenate (type &rest sequences)
"Concatenate, into a sequence of type TYPE, the argument SEQUENCEs.
\n(fn TYPE SEQUENCE...)"
(pcase type
(`vector (apply #'vconcat sequences))
(`string (apply #'concat sequences))
(`list (apply #'append (append sequences '(nil))))
(_ (error "Not a sequence type name: %S" type))))
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 nconc é uma função interna do 'código fonte C'.
(lista Nconc e Rest)
Concatene qualquer número de listas alterando-as. Somente o último argumento não é alterado e não precisa ser uma lista.
O que isto significa:
(nconc '("a" "b" "c") '("d" "e" "f"))
=> ("a" "b" "c" "d" "e" "f")
(setq l1 '("a" "b" "c")
l2 '("d" "e" "f"))
(nconc l1 l2)
=> ("a" "b" "c" "d" "e" "f")
l1
=> ("a" "b" "c" "d" "e" "f")
l2
=> ("d" "e" "f")