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.

appendes 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-listen 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"))appendparece mejor aquí.cl-concatenateusaappendcuando TYPE eslist, entonces ambas respuestas están produciendo el mismo resultado.Entonces para tu ejemplo
Como está definido en,
cles posible que(require 'cl)primero tenga que hacerlo , de lo contrario, puede usar elcl-concatenateque parece estar cargado de forma predeterminada.Además, como señaló @phils
cl-concatenatesolo llamaappendcuando 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 bienvarnamemás que'varname).seq-concatenate(después(require 'seq)), aunque esto a su vez simplemente se cierracl-concatenate.