Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在新泽西州SML创建不同的微积分函数_Sml_Smlnj - Fatal编程技术网

在新泽西州SML创建不同的微积分函数

在新泽西州SML创建不同的微积分函数,sml,smlnj,Sml,Smlnj,A) 编写函数indefinegratepoly,它获取代表多项式的系数列表(在所有项都存在的情况下,按从最高阶到最低阶的顺序),并返回一个新的系数列表​表示该多项式的不定积分的系数。您必须使用foldr(如下所示)。假设代表不定积分的反导数产生的常数为0.0 fun foldr (f, s, []) = s ​ | foldr (f, s, x::rest) = f(x, foldr(f, s, rest)); 我只是想知道从哪里开始,因为我正在努力获得有意义的ant类型的函数 内置的fo

A) 编写函数
indefinegratepoly
,它获取代表多项式的系数列表(在所有项都存在的情况下,按从最高阶到最低阶的顺序),并返回一个新的系数列表​表示该多项式的不定积分的系数。您必须使用
foldr
(如下所示)。假设代表不定积分的反导数产生的常数为0.0

fun foldr (f, s, []) = s
 ​ | foldr (f, s, x::rest) = f(x, foldr(f, s, rest));
我只是想知道从哪里开始,因为我正在努力获得有意义的ant类型的函数

内置的
foldr
类似于此功能,但定义为

fun foldr f s [] = ...
也就是说,咖喱而不是元组

在下面的回答中,我将假设您的
foldr
版本

我只是想知道从哪里开始

你可以从

fun indefintegratedpoly ks=
让fun f(k,acc)=。。。
在foldr(f,[],ks)中
结束
其中,
f
取一个系数,并在
acc
中建立一个综合系数列表

请注意,
foldr
从右向左折叠,因此
k
的第一个值是具有最小幂的项的系数。您知道这个幂有多大,因为它从1开始,后续的折叠迭代表示幂大于1的项

如果我没记错的话,a·x^n积分为(a·x^(n+1))/n,所以对于任何一个项,都必须除以该项的幂。这意味着
f
的上下文必须具有可用的上下文
acc
可以是任何类型,例如int×int列表,其中第一个int是当前术语的幂

在模板上展开

fun indefintegratedpoly ks=
让fun f(k,(n,iks))=
(n+1,…)
在#2中(foldr(f,[],(1,ks)))
结束
折叠累积一对,其中
k
是当前项的系数,
n
是当前项的幂,
iks
是综合系数列表。增加每个项的幂(将n变成a·x^n中的n+1→ (a·x^(n+1))/n)是向列表中添加一个额外项的问题,可以通过使用一些
[j]
而不是
[]
初始化折叠来完成,其中
j
是常数项k作为k的系数→ k·x^1

由于
foldr
现在生成一对,并且该对的
#1
部分仅在迭代期间使用,而
#2
部分保留积分系数,因此可以通过使用
#2
对该对进行分解来丢弃最大幂

fun foldr f s [] = ...