0

所以我必须用SML写一个小程序->>

一个名为 'p0.sml' 的文件,其中包含一个名为 的函数,该函数接受值的epoly参数 alist到,以及一个真实值。该列表包含形式为 的多项式的系数,其中使用的实数是传递给函数的参数。您的实现必须接受系数列表作为第一个参数,并将值作为第二个参数。您的函数必须返回由传递给它的参数指定的多项式的值。reala0anxa0 + a1x + a2x 2 + … + anx nxxx

这是我到目前为止所拥有的,但由于 as 的语法错误而无法编译。“错误:在 AS 发现语法错误”。如果您有任何指示将不胜感激。

fun epoly([], x:real) = 0.0
= epoly(L:real list as h::T, x:real) = h + (x * epoly(T, x));
4

1 回答 1

1

看起来你有一个错字。你的第二个=应该是|.

fun epoly([], x:real) = 0.0
  | epoly(L:real list as h::T, x:real) = 
      h + (x * epoly(T, x));

此外,无需指定类型。您的 SML 编译器可以从提供的数据中推断出类型。除了删除不必要的绑定外,这还可以简化为:

fun epoly([], _) = 0.0
  | epoly(h::T, x) = 
      h + (x * epoly(T, x));

fun epoly([], _) = 0.0我们所知epoly,将采用一个列表和某种类型的元组并返回real

从:

  | epoly(h::T, x) = 
      h + (x * epoly(T, x));

我们知道x乘以a real,所以x一定是real。并且由于h被添加到 a real,它必须是 a real,所以整个列表是 a real list

Thus the type of epoly can be inferred correctly to be real list * real -> real.

于 2022-01-23T03:25:27.640 回答