----- 28/12/17 ----- > Sto affrontando l'esercitazione di Laboratorio su temi d'esame del 20/21 Dicembre 2017. > Provando a risolvere il primo esercizio, mi sembra ci sia un errore nell'ultima istruzione, > perche' la soluzione basata sull'impostazione proposta non funziona in quanto per > > u = "astrazione" e v = "estremi" > > restituisce "*e". > La mia soluzione, riportata sotto, restituisce correttamente "*str**i": > > (define matchi > (lambda (u v) > (if (or (string=? u "") (string=? v "")) > "" > (let ( (uh (string-ref u 0)) (vh (string-ref v 0)) (s (substring v 0 1))) > (if (char=? uh vh) > (string-append s (matchi(substring u 1) (substring v 1)) ) > (string-append "*" (matchi(substring u 1) (substring v 1))) > )) > ))) ----- Il programma riportato sopra e' una soluzione corretta del problema, ma non rispetta tutti i vincoli del codice da completare riportato nel testo dell'esercizio. Sull'impostazione, quindi, non c'e' nulla da dire (concettualmente si tratta della stessa soluzione che sta alla base del codice incompleto). Resta solo da vedere come si potrebbe aggiustare per soddisfare anche i vincoli formali. A tal fine si puo' osservare che l'espressione: (matchi (substring u 1) (substring v 1)) e' usta due volte due volte, proprio in corrispondenza alle occorrenze della variabile s nel codice incompleto. Quindi basterebbe avere nel "let" l'associazione: (s (matchi (substring u 1) (substring v 1))) per sistemare una discordanza. Inoltre, l'espressione che associata ad s puo' essere inserita direttamente come primo argomento di string-append nel ramo then dell'if, sistemando cosi' anche il resto. ----- * -----