----- 12/06/14 ----- > Ho risolto il problema di laboratorio #13. > Il programma restituisce correttamente le liste per i primi 4 esempi > del testo dell'esercizio, ma si verifica un problema con i dati > ("articolazione", "alcaloide"), in quanto non vengono calcolate > tutte le possibili soluzioni... > > private static StringList longer( StringList u, StringList v ) { > > int m = StringList.listCar(u).length(); > int n = StringList.listCar(v).length(); > > if ( m < n ) { > return v; > } else if ( m > n ) { > return u; > } else { // m e n hanno stessa lunghezza > if(StringList.listCar(u) == StringList.listCar(v)){ > return u; > } else { > return unisci(u, v); // return stringlist MERGE (u, v) > } > } > } > > [...] > > private static StringList unisci (StringList u, StringList v){ > if(StringList.listNull(u)){ > return v; > } else { > v = StringList.listCons(StringList.listCar(u), v); > unisci(StringList.listCdr(u), v); > return v; > } > } ----- Ci sono due problemi: 1. Nel metodo "longer", se la stringa iniziale delle due liste e' la stessa non si puo' "gettare via" tutti gli altri elementi di una delle due liste. 2. Il caso ricorsivo del metodo "unisci" e' trattato in modo non funzionale e parte dei risultati calcolati vanno perduti. Inoltre non viene mai verificato se una stessa stringa compare in entrambe le liste (operazione abbozzata in "longer", ma non e' quella la sede appropriata). ----- * -----