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")