concatenate è un alias per "cl-concatenate" in "cl.el".
(concatena SEQUENZA DI TIPO ...)
Concatenare, in una sequenza di tipo TYPE, l'argomento SEQUENCEs.
Quindi per il tuo esempio
(concatenate 'list '("a" "b" "c") '("d" "e" "f"))
Poiché è definito in cl
, potrebbe essere necessario (require 'cl)
innanzitutto, altrimenti è possibile utilizzare cl-concatenate
quale sembra essere caricato per impostazione predefinita.
Inoltre, come sottolineato da @phils cl-concatenate
chiama solo append
quando TYPE è 'list
, ecco la fonte da 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))))
Quindi, se stai usando solo le liste, è più semplice da usare direttamente append
, come sottolineato da @ John Kitchin.
Infine, @lawlist ha menzionato nconc
:
nconc è una funzione integrata in "codice sorgente C".
(nconc & rest LISTE)
Concatena un numero qualsiasi di elenchi modificandoli. Solo l'ultimo argomento non viene modificato e non è necessario che sia un elenco.
Cosa 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")