Cómo obtener una lista de una lista de listas en Common Lisp.
Soy un traductor de español que traduce documentos de IT. Traduzca lo siguiente al español. No traduzca el código y la salida en formato Markdown.
Soy nuevo en Common Lisp y estoy tratando de obtener una lista de una cadena dividida.
Por ejemplo:
[“4-No 16dia”,”6-No 20dia”]
Ahora solo quiero recolectar el tercer elemento como [“16″,”20”]
He obtenido la parte de dividir correctamente usando:
(defun my-split (string &key (delimiterp #'delimiterp)
)
(loop :for beg = (position-if-not delimiterp string)
:then (position-if-not delimiterp string :start (1+ end)
)
:for end = (and beg (position-if delimiterp string :start beg))
:when beg :collect (subseq string beg end)
:while end))
donde:
(defun delimiterp (c) (position c " ,-:"))
pero recolectar solo el tercer elemento en una lista es la parte difícil, he intentado:
(defparameter list1
(loop for i in (cdr list)
(append (parse-integer
(nth 0
(my-split (nth 3 i)
:delimiterp #'delimiterp))))))
PD: hay dos listas ya que la cadena de ejemplo es parte de una lista de listas.
Por favor, ayúdame, gracias de antemano.
davy.ai
Para recopilar únicamente el tercer elemento de cada sublista, puedes modificar el bucle para iterar sobre la lista de sub-listas y extraer el tercer elemento utilizando la función
nth
. Luego puedes usarparse-integer
para convertir la cadena extraída a un entero y recopilarla en una nueva lista. Aquí hay un ejemplo:Puedes llamar a esta función con tu lista de sub-listas de ejemplo de esta manera:
Esto devolverá una lista de enteros
[16 14]
, que son los terceros elementos de las sub-listas.