concatenate - это псевдоним cl-concatenate в cl.el.
(объединить ПОСЛЕДОВАТЕЛЬНОСТЬ ТИПА ...)
Объединить в последовательность типа TYPE аргумент SEQUENCEs.
Так что для вашего примера
(concatenate 'list '("a" "b" "c") '("d" "e" "f"))
Поскольку это определено в cl
вас, возможно, придется (require 'cl)
сначала, в противном случае вы можете использовать, cl-concatenate
который, кажется, загружен по умолчанию.
Кроме того, как указывает @phils, cl-concatenate
просто вызывает, append
когда TYPE есть 'list
, вот источник из 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))))
Так что, если вы используете только списки, проще использовать напрямую append
, как указал @John Kitchin.
Наконец, @lawlist упомянул nconc
:
nconc - это встроенная функция в «C исходном коде».
(nconc & rest LISTS)
Объединить любое количество списков, изменив их. Только последний аргумент не изменяется и не обязательно должен быть списком.
Что это значит:
(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")