2017-01-24 22 views
1

実数のリストから作られた多項式のxの値を計算する関数を記述しました。カルト関数(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; 

このコードはすべて正常に動作し、私はそれを非常に誇りに思います。

私は部分的なアプリケーションを使用して多項式関数を作成するために管理している:

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

> f 2.0; 
val it = 17.0 : real 

はmathetmatical機能の作成:f(x) = 3*x^2 + 2*x + 1

これは、すべての罰金ですが、私はこの方法で機能を構築することができるようにしたいです:

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

これは私に上記と同等の機能を与えます。 これは可能ですか? 私はそれが自明であることを知っています、私は以前と同じようにxを置くことができ、私の人生で乗り越えることができます。しかし、私は誰かがこの問題を回避する方法について興味があります!事前に

おかげで、シアラン

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; 

ラブリー!

答えて

3

私があなたの質問を正しく理解していれば、何も定義する必要はありません。あなたは既にタイプreal -> realの関数として定義されてf

val f = poly [3.0, 2.0, 1.0] 

を行うことができます持っている機能poly付き。

関連する問題