es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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 usar parse-integer para convertir la cadena extraída a un entero y recopilarla en una nueva lista. Aquí hay un ejemplo:

    (defun extraer-terceros-elementos (lista-de-listas)
      (loop for sublista in lista-de-listas
            collect (parse-integer (nth 2 sublista))))
    

    Puedes llamar a esta función con tu lista de sub-listas de ejemplo de esta manera:

    (let ((lista-de-listas '(("1-No 12dia" "2-No 14dia" "3-No 16dia" "4-No 18dia")
                           ("1-No 18dia" "2-No 16dia" "3-No 14dia" "4-No 12dia"))))
      (extraer-terceros-elementos lista-de-listas))
    

    Esto devolverá una lista de enteros [16 14], que son los terceros elementos de las sub-listas.

Comments are closed.