----- 10/6/05 ----- > [...] In merito ad un esercizio [...] assegnato in laboratorio. > L'esercizio riguarda una procedura Scheme che data una funzione in ingresso, > restituisca la funzione inversa, di modo che f_inversa( f(n) ) = n. > Ho provato a riscrivere la procedura [...]: > > (define inversa > (lambda (fun) > (lambda (n) > n > ))) > > (define funzione ...) > > ((inversa funzione) 5) > > Non sono certo che l'esercizio vada svolto cosi' [...] In effetti il codice sopra riportato non risolve il problema proposto. La funzione restituita dalla procedura "inversa", indipendentemente dalla funzione passata come parametro, e' la funzione identita' (e quindi e' l'inversa solo della funzione identita'). la verifica della relazione f_inversa( f(n) ) = n in un particolare punto (p.es. 5) andrebbe inoltre formalizzata in Scheme cosi': ((inversa funzione) (funzione 5)) Supponendo che sia definita una funzione f tale che: y0 = f(0), y1 = f(1), y2 = f(2), ... si vuole ottenere come risultato la funzione g tale che 0 = g(y0), 1 = g(y1), 2 = g(y2), ... Chiaramente il problema e' ben posto solo se f e' iniettiva, e occorre inoltre ammettere che nel caso in cui y* non appartenga all'immagine di f, allora g(y*) non sia definita. La struttura e' quindi: (define inversa ; (inversa f) --> g (lambda (f) ; f iniettiva (lambda (y) ; argomento della g . . . . . . ; se esiste x tale che f(x) = y . . . . . . ; allora il valore e' x . . . . . . ; altrimenti... ))) ----- * -----