Maaf, tapi elisp bukan yang terbaik. Saya perlu menggabungkan dua daftar string dengan cara ini:
("a" "b" "c") + ("d" "e" "f") -> ("a" "b" "c" "d" "e" "f")
Nah, urutannya tidak penting, jadi saya menulis kode ini:
(while lista
(add-to-list 'listb (car lista))
(setq lista (cdr lista)))
Berhasil, tapi saya bertanya-tanya apakah ada fungsi yang sudah melakukan ini.
Ada petunjuk? Terima kasih sebelumnya.
append
adalah jawaban yang benar di sini, tetapi cara lain (destruktif) untuk melakukannya adalah(setcdr (last a) b)
.(-concat '(1) '(2 3) '(4)) ;; => '(1 2 3 4)
add-to-list
dalam kode Lisp (ia mengatakan ini di docstring). Sebaliknya, gunakanpush
.Jawaban:
Anda juga bisa menggunakan append.
sumber
(nconc '("a" "b" "c") '("d" "e" "f"))
append
sepertinya lebih baik di sini.cl-concatenate
menggunakanappend
ketika TYPE adalahlist
, jadi kedua jawaban menghasilkan hasil yang sama.Jadi untuk contoh Anda
Karena itu didefinisikan di
cl
Anda mungkin harus(require 'cl)
terlebih dahulu, jika tidak Anda dapat menggunakancl-concatenate
yang tampaknya dimuat secara default.Juga, seperti yang ditunjukkan oleh @phils
cl-concatenate
hanya meneleponappend
saat TYPE sedang'list
, inilah sumber daricl-extra.el
:Jadi jika Anda hanya menggunakan daftar, lebih mudah digunakan secara langsung
append
, seperti yang ditunjukkan oleh @John Kitchin.Akhirnya, @lawlist menyebutkan
nconc
:Apa artinya ini:
sumber
(setq l1 '("a" "b" "c") l2 '("d" "e" "f")) (concatenate 'list l1 l2)
berfungsi ok.varname
daripada'varname
).seq-concatenate
(setelah(require 'seq)
), meskipun ini pada gilirannya hanya membungkuscl-concatenate
.