concatenate เป็นชื่อแทนสำหรับ 'cl-concatenate' ใน 'cl.el'
(เรียงลำดับประเภทเรียงต่อกัน ... )
เชื่อมต่อกันเป็นลำดับประเภท TYPE อาร์กิวเมนต์ SEQUENCE
ดังนั้นสำหรับตัวอย่างของคุณ
(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")