Sono nuovo al Common Lisp e alla programmazione funzionale, ma ho molta esperienza in linguaggi come C, C++, C#, Java e così via. Ho difficoltà a trovare la lista più annidata all'interno di una lista. Il mio ingresso è qualcosa di simile:Trova l'elenco più annidato all'interno di un elenco in Common Lisp
(0 1 (2 3) 4 (5 (6 (7) 8)) 9)
Vorrei ottenere l'elenco più annidata all'interno di questa lista che in questo caso è
(7)
ho avuto un'idea che ho potuto appiattire la lista in qualche modo fino a quando non è rimasta una sola sottoclasse. Per illustrare quello che voglio dire, qui è a pochi passi:
Fase 1. - Ingresso:
(0 1 (2 3) 4 (5 (6 (7) 8)) 9)
Fase 2. - appiattire su "primo livello":
(0 1 2 3 4 5 (6 (7) 8) 9)
punto 3. - appiattire su "secondo livello":
(0 1 2 3 4 5 6 (7) 8 9)
Ora c'è una sola lista annidata a sinistra, il che significa che è stata la lista più nidificato. Ma vedo un problema qui, quando si verificano due o più di tali elenchi. Per favore condividi le tue opinioni su questo.
Ho problemi a mettere questa procedura in realtà in Common Lisp, quindi sarei grato per alcuni suggerimenti nella giusta direzione, forse qualche codice di esempio e così via. Questo è un compito a casa, quindi non mi aspetto una soluzione completa, ma sarei lieto se qualcuno indicasse forse una soluzione più semplice e migliore e la sua implementazione.
Una specie di problema interessante.Penso che quello che farei sarebbe un attraversamento DFS, e registrare la coppia (foglia, profondità della foglia) in una lista, quindi cercare nella pila la foglia con la profondità massima. –