1

J'ai écrit une fonction qui calcule une valeur de x, d'un polynôme fait à partir d'une liste de réels.Création d'une fonction qui retourne une fonction curry (SML)

infixr 5 ^^; 

fun (x:real) ^^ 0 = 1.0 
    | (x:real) ^^ n = x*(x^^(n-1)); 

fun poly [] (x:real) = 0.0 
    | poly (hd::tl) (x:real) = hd*(x^^(length tl)) + poly tl x; 

Ce code fonctionne parfaitement bien, et j'en suis très fier.

J'ai réussi à créer des fonctions polynômes en utilisant l'application partielle:

> fun f x = poly [3.0,2.0,1.0] x; 
val f = fn : real -> real 

> f 2.0; 
val it = 17.0 : real 

Création de la fonction mathetmatical: f(x) = 3*x^2 + 2*x + 1

Tout cela est bien, mais je veux être en mesure de construire une fonction par cette méthode :

fun f x = polyGen [1.0,2.0,3.0]; 

Et il me donnera une fonction équivalente à celle ci-dessus. Est-ce possible? Je sais que cela semble trivial, je pourrais juste mettre un x là comme je l'ai fait avant et continuer ma vie. Mais je suis juste curieux de savoir comment quelqu'un pourrait contourner ce problème!

Merci à l'avance, Ciaran

EDIT:

fun polyGen L = let fun poly [] x = 0.0 
         | poly (hd::tl) x = hd + x*(poly tl x); 
       in fn x => poly L x end; 

Lovely!

Répondre

3

Si je comprends bien votre question, alors vous n'avez pas besoin de définir quoi que ce soit d'autre. Avec la fonction poly que vous avez, vous pouvez déjà faire

val f = poly [3.0, 2.0, 1.0] 

qui définit f en fonction du type real -> real.