A)编写函数indefIntegratePoly
,该函数获取代表多项式的系数列表(从最高阶到最低阶,并且存在所有项),并返回代表该多项式的不定积分的新系数列表。您必须使用foldr
(如下所示)。假定代表不定积分的反导数产生的常数为0.0。
fun foldr (f, s, []) = s
| foldr (f, s, x::rest) = f(x, foldr(f, s, rest));
我只想知道从哪里开始,因为我在努力获得有意义的ant类型的功能。
fun foldr (f, s, []) = ...
内置foldr
类似于此功能,但定义为
fun foldr f s [] = ...
即,咖喱而不是元组。在下面的响应中,我假设您使用的是
foldr
版本。我只想知道从哪里开始您可以开始使用
fun indefIntegratePoly ks = let fun f (k, acc) = ... in foldr (f, [], ks) end
其中f
取一个系数,并在acc
中建立一个积分系数列表。请注意,
foldr
从右到左折叠,因此k
的第一个值是具有最小功效的项的系数。您知道该幂的大小,因为它从1开始,并且倍数的后续迭代表示的幂大于该幂。如果我没记错的话,
a·x ^ n与((a·x ^(n + 1))/ n积分,所以对于任何一项,都必须除以该项的功效。这意味着
展开模板,f
的上下文必须具有可用的上下文。acc
可以是任何类型,例如int×int list,其中第一个int是当前项的幂。
fun indefIntegratePoly ks = let fun f (k, (n, iks)) = (n+1, ...) in #2 (foldr (f, [], (1, ks))) end
倍数累积一对,其中k
是当前项的系数,n
是当前项的幂,并且iks
是综合系数的列表。增加每个项的幂(在a·x ^ n中将n转换为n + 1→(a·x ^(n + 1))/ n) )是向列表中添加一个额外项的问题,这可以通过用一些
由于[j]
而不是[]
初始化折叠来完成,其中j
是常数项k的系数为< [k→k·x ^ 1。foldr
现在会产生一个对,并且该对的#1
部分仅在迭代过程中使用,而#2
部分保留了积分系数,因此可以通过使用[ C0]。