Как написать функцию, которая вычисляет F (x), если x = целое число в sml - PullRequest
1 голос
/ 29 марта 2020

Я пытаюсь написать рекурсивную функцию, которая принимает список и целое число в качестве параметра, где список является полиномом, т. Е. (Val P = [5.0, 4.0, 0.0, 1.0] = x ^ 3 + 4x - 5 ) и целочисленный параметр равен x, т. е. x = 2, поэтому f (2) = x ^ 3 + 4x - 5. Вот что я дошел до этого ...

val P = [5.0, 4.0, 0,0, 1,0]; val a = 2;

fun eval(nil, a) = 0.0
    | eval(x::xs, a:real) = 
        x + (eval(xs, a) * a)
eval(P, a);

после запуска кода выдает эту ошибку: stdIn: 22.4-24.11 Ошибка: оператор не является оператором функции [несоответствие типов]: действительный в выражении: (eval ( xs, a) * a) eval

способ, которым рекурсия "предполагает" работать, - это P = a + Qx, где P - исходный список, a - x в x :: xs, а Q - xs и x - это целочисленный параметр, который был передан. Любая помощь приветствуется. Спасибо !!

Ответы [ 2 ]

1 голос
/ 29 марта 2020

Хорошо, так что я понял это. Здесь go ...

val P = [~5.0, 4.0, 0.0, 1.0];
val a = 2.0;

fun eval(nil, a) = 0.0
  | eval(x::xs, a:real) = 
    x + (eval(xs, a) * a);

eval(P, a);
0 голосов
/ 30 марта 2020

Поскольку вы ответили на свой вопрос (хорошо для вас!), Вот еще один способ написать его:

fun eval ([], _) = 0.0
  | eval (x::xs, y) = x + eval (xs, y) * y
...