Ich habe eine Funktion geschrieben, die einen Wert von x berechnet, aus einem Polynom aus einer Liste von Realen.Erstellen einer Funktion, die eine Curry-Funktion (SML) zurückgibt
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;
Dieser Code funktioniert einwandfrei, und ich bin ziemlich stolz darauf.
> fun f x = poly [3.0,2.0,1.0] x;
val f = fn : real -> real
> f 2.0;
val it = 17.0 : real
Erstellen der mathetmatical Funktion: mit teilweise Anwendung
Ich habe es geschafft Polynomfunktionen erstellen f(x) = 3*x^2 + 2*x + 1
Das ist alles in Ordnung, aber ich möchte in der Lage, eine Funktion, die durch dieses Verfahren zu konstruieren :
fun f x = polyGen [1.0,2.0,3.0];
Und es wird mir eine äquivalente Funktion zu der oben genannten geben. Ist das möglich? Ich weiß, es scheint trivial, ich könnte einfach ein x dort setzen, wie ich es vorher getan habe und mit meinem Leben weitermachen. Aber ich bin nur neugierig darauf, wie jemand dieses Problem umgehen könnte!
Vielen Dank im Voraus, 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!