----- 15/01/18 ----- > Penso che la seguente procedura sia corretta, > ma si continuano a verificare errori e non capisco dove sbaglio: > > (define shared > (lambda (u v) ; liste ordinate > (if (null? u) > "" > (if (= (car u) (car v)) > ((list (car u) '()) (shared (cdr u) (cdr v))) > (shared u (cdr v)) > )) > )) ----- Il codice riportato sopra presenta una serie di problemi: 1. Nella quarta riga viene restituita una stringa (vuota), ma il risultato dovrebbe essere di tipo lista. 2. Nella sesta riga immagino si tratti di aggiungere l'elemento condiviso all'inizio della lista che risulta dall'invocazione ricorsiva. Manca pero' l'operazione (procedura) che mette insieme elemento e lista. 3. Inoltre, sempre nella sesta riga, applicando l'operatore list a due liste si otterrebbe una lista di due liste, non la fusione di due liste. 4. L'ultima espressione del programma, che compare nella settima riga, e' corretta solo se l'elemento che escludi (car v) e' piu' piccolo del suo corrispondente nell'altra lista (car u), non lo e' invece nella situazione opposta. ----- * -----