concatenate, 'cl.el' içindeki 'cl-concatenate' için bir takma addır.
(TİP SIRASI'nı bitiştir ...)
TYPE türünde bir sıraya SEQUENCE argümanı ekleyin.
Yani örneğin
(concatenate 'list '("a" "b" "c") '("d" "e" "f"))
İçinde tanımlandığından, önce cl
yapmanız gerekebilir (require 'cl)
, aksi takdirde cl-concatenate
varsayılan olarak yüklenmiş gibi kullanabilirsiniz .
Ayrıca, @phils'in işaret ettiği gibi , TYPE olduğu zaman cl-concatenate
çağrı append
yapar 'list
, kaynak 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))))
Bu nedenle, yalnızca listeleri kullanıyorsanız append
, @John Kitchin tarafından işaret edildiği gibi doğrudan kullanmak daha kolaydır .
Son olarak, @lawlist şunları söyledi nconc
:
nconc, 'C kaynak kodu'nda yerleşik bir fonksiyondur.
(dinlen ve dinlen LİSTELERİ)
İstediğiniz sayıda listeyi değiştirerek birleştirin. Yalnızca son argüman değiştirilmez ve bir liste olması gerekmez.
Bunun anlamı:
(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")