所以我想找到将函数f应用于前n个整数的总和,当将f应用于前n个整数的总和应用于n加上将f应用于前n个整数的总和时,如:
- fun inc x = x+1;
> val inc = fn : inet -> int
- sumF inc 3;
> 9 : int i.e. inc 3+inc 2+ inc 1+ 0
我的sumF现在看起来像这样:
- fun sumF 0 = 0 | sumF n = sumF(n) + sumF(n-1);
val sumF = fn : int -> int
- sumF inc 3;
stdIn:15.1-15.11 Error: operator and operand don't agree [tycon mismatch]
operator domain: int
operand: int -> int
in expression:
sumF inc
你可以看到我收到错误,所以也许有人知道如何修复它?因为稍后,我想写sumSq(sumSq n =(n n)+ sumSq(n-1))和sumHalf(sumSq n =(n n)+ sumSq(n-1)) ,使用sumF。 谢谢!
答案 0 :(得分:1)
这是一个可能的解决方案:
fun sumF f 0 = 0
| sumF f n = f n + sumF f (n - 1)
您的问题是,您实际上并未在inc
函数的定义中使用sumF
函数。您只用一个int类型的参数定义sumF
函数,但是然后用“two arguments”调用此函数。您的函数调用sumF inc 3
被解释为((sumF inc) 3)
,因为inc
的类型是int - > int,但函数需要int类型的参数,你得到错误。而且,除此之外,您的函数还有一个问题 - 它会创建无限循环,因为您在sumF n
的定义中调用了sumF n
。
您可以将上述功能称为
- fun inc x = x + 1;
val inc = fn : int -> int
- sumF inc 3;
val it = 9 : int
或使用匿名函数缩短一点:
- sumF (fn x => x + 1) 3;
val it = 9 : int
问候,Špela