Recursion 标准ML:带两个参数的递归函数

Recursion 标准ML:带两个参数的递归函数,recursion,sml,Recursion,Sml,我在做练习题,我被卡住了 我应该声明一个函数sum:int*int->intwhere 和(m,n)=(m+(n-1))+(m+n) 我的递归函数如下所示: sum(m,0)=0 |和(m,n)=m+和(n-1)+(m+n) 为什么我会出错 我不知道这到底应该做什么,但是您得到了一个错误,因为第二行中的递归调用只有一个参数,尽管sum需要两个参数。但是sum(m,n)=(m+(n-1))+(m+n)根本不是递归函数——您确定目标不是对n到m范围内的所有数字求和吗?这可能是。。。然而,它是在递归一

我在做练习题,我被卡住了

我应该声明一个函数
sum:int*int->int
where

和(m,n)=(m+(n-1))+(m+n)

我的递归函数如下所示:

sum(m,0)=0
|和(m,n)=m+和(n-1)+(m+n)


为什么我会出错

我不知道这到底应该做什么,但是您得到了一个错误,因为第二行中的递归调用只有一个参数,尽管
sum
需要两个参数。

但是
sum(m,n)=(m+(n-1))+(m+n)
根本不是递归函数——您确定目标不是对n到m范围内的所有数字求和吗?这可能是。。。然而,它是在递归一章下?也许他们想要一个所有数字之和的递归函数?问题是你所写的在代数上等价于
sum(m,n)=2m+2n-1
,这是没有意义的。从后继函数递归定义加法是一项标准练习(在自然数的某些公理化处理中很重要),但这将对应于
sum(m,n)=sum(m,n-1)+1
。你确定你把它抄对了吗?@johncleman这很有道理。。。。(你写的)这是迈克尔·汉森和汉斯·瑞舍尔的《使用SML编程入门》一书中的内容。我仔细检查了一下——他们确实像我上面写的那样写。也许这是书中的一个拼写错误?我从那本书中学习了SML(并且非常喜欢它)。我刚检查了我的副本。在第1章练习中,问题1.4要求您定义函数
sum(m,n)=m+(m+1)+(m+2)+…+(m+(n-1))+(m+n)
,这更有意义。看起来你正在使用的副本不知何故允许输入错误。谢谢!我刚才也注意到了。我现在有这样的东西:
fun sum(m,0)=1 | sum(m,n)=m+sum(m,~1)
这确实给了我一个
val sum=fn:int*int->int
的输出,但我认为这并不正确。有什么想法吗?@opheliaxo:用这些信息更新你的问题。