concatenate es un alias para 'cl-concatenate' en 'cl.el'.
(concatenar SECUENCIA DE TIPO ...)
Concatenar, en una secuencia de tipo TIPO, el argumento SECUENCIAS.
Entonces para tu ejemplo
(concatenate 'list '("a" "b" "c") '("d" "e" "f"))
Como está definido en, cl
es posible que (require 'cl)
primero tenga que hacerlo , de lo contrario, puede usar el cl-concatenate
que parece estar cargado de forma predeterminada.
Además, como señaló @phils cl-concatenate
solo llama append
cuando TYPE es 'list
, aquí está la fuente 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))))
Entonces, si solo usa listas, es más fácil de usar directamente append
, como lo señaló @John Kitchin.
Finalmente, @lawlist mencionó nconc
:
nconc es una función incorporada en 'código fuente C'.
(nconc & LISTAS de descanso)
Concatene cualquier número de listas al alterarlas. Solo el último argumento no se modifica y no necesita ser una lista.
Lo que esto 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")