1

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!

Antwort

3

Wenn ich Ihre Frage richtig verstanden habe, dann brauchen Sie nichts anderes zu definieren. Mit der Funktion poly, die Sie haben, können Sie bereits tun

val f = poly [3.0, 2.0, 1.0] 

die real -> realf als Funktion des Typs definiert.

Verwandte Themen