Lo siento, pero elisp no es mi mejor. Necesito combinar dos listas de cadenas de esta manera:
("a" "b" "c") + ("d" "e" "f") -> ("a" "b" "c" "d" "e" "f")
Bueno, el orden no es importante, así que escribí este código:
(while lista
(add-to-list 'listb (car lista))
(setq lista (cdr lista)))
Funciona, pero me pregunto si hay una función que ya lo haga.
¿Cualquier pista? Gracias por adelantado.
append
es la respuesta correcta aquí, pero sería otra forma (destructiva) de hacerlo(setcdr (last a) b)
.(-concat '(1) '(2 3) '(4)) ;; => '(1 2 3 4)
add-to-list
en el código Lisp (dice esto en la cadena de documentación). En cambio, usepush
.Respuestas:
También puedes usar append.
fuente
(nconc '("a" "b" "c") '("d" "e" "f"))
append
parece mejor aquí.cl-concatenate
usaappend
cuando TYPE eslist
, entonces ambas respuestas están produciendo el mismo resultado.Entonces para tu ejemplo
Como está definido en,
cl
es posible que(require 'cl)
primero tenga que hacerlo , de lo contrario, puede usar elcl-concatenate
que parece estar cargado de forma predeterminada.Además, como señaló @phils
cl-concatenate
solo llamaappend
cuando TYPE es'list
, aquí está la fuente decl-extra.el
:Entonces, si solo usa listas, es más fácil de usar directamente
append
, como lo señaló @John Kitchin.Finalmente, @lawlist mencionó
nconc
:Lo que esto significa:
fuente
(setq l1 '("a" "b" "c") l2 '("d" "e" "f")) (concatenate 'list l1 l2)
funciona bienvarname
más que'varname
).seq-concatenate
(después(require 'seq)
), aunque esto a su vez simplemente se cierracl-concatenate
.