Я написал функцию, которая вычисляет значение x многочлена, составленного из списка вещественных чисел.
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
Создание математической функции:f(x) = 3*x^2 + 2*x + 1
Это все хорошо, но я хочу иметь возможность построить функцию с помощью этого метода:
fun f x = polyGen [1.0,2.0,3.0];
И это даст мне функцию, эквивалентную приведенной выше. Это возможно? Я знаю, что это кажется тривиальным, я мог бы просто поставить там крестик, как делал раньше, и жить дальше. Но мне просто любопытно, как кто-то решит эту проблему!
Заранее спасибо, Киаран
РЕДАКТИРОВАТЬ:
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;
Прекрасный!