giorno people
buongiornissimo! domanda algoritmosa mattiniera per voi! immaginate di avere una mappa parecchio grande che ha come chiavi liste di stringhe e come valori liste di liste di stringhe. Ora con questa mappa per ogni chiave bisogna creare tuttue le liste formate da “percorsi” tra chiavi e liste. Praticamente scelgo una chiave e tutti i valori associati diventano le chiavi da cui ripartire fino a quando non ci sono piu’ valori associati. Ho fatto un’implementazione ricorsiva della funzione ma sono andato incontro ad un stackoverflow perche’ la mappa e’ troppo grande. Il problema e’ che la chiamata ricorsiva deve essere fatta dentro al loop dei valori della chiave e quindi non riesco ad usare recur perche’ non e’ tail recursion
Se hai voglia posta un esempio input output. Non riesco ad interpolare la definizione di “partire” per “andare” etc.
eheh c’hai anche ragione
input: da “This is a cat.\nThis is a dog.\nThis is pizza” creo {(“This” “is” “a”) ((“dog.“) (“cat.“)), (“cat.“) (nil), (“dog.“) (nil), (“This” “is” “pizza”) (nil)}
il risultato dovrebbe essere
((“This” “is” “a”) (“dog.“) (“This” “is” “a”) (“cat.“) (“cat.“) (“dog.“) (“This” “is” “pizza”))
la funzione che ho fatto e’ (defn all-sentences [chain current-key sentence] (let [words (get chain current-key)] (for [w words] (if (empty words) (concat sentence current-key) (all-sentences chain w sentence)))))
che funziona per l’esempio ma mi va in stackoverflow se la mappa e’ grande
potrebbe anche essere concat il problema adesso che ci penso pero’
mmh, perche’ non c’e’ ("pizza")
tra i risultati?
sembra un problema interessante :)
Eh perché sono triplette di parole in un testo