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]; 

И это даст мне эквивалентную функцию выше. Возможно ли это? Я знаю, что это кажется тривиальным, я мог бы просто положить х, как и раньше, и продолжить свою жизнь. Но мне просто интересно, как кто-то справится с этой проблемой!

Спасибо заранее, Кьяране

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

Если я правильно понимаю ваш вопрос, тогда вам не нужно ничего определять вообще. С помощью функции poly, что у вас есть вы уже можете сделать

val f = poly [3.0, 2.0, 1.0] 

, который определяет f в зависимости от типа real -> real.

Смежные вопросы