我正在尝试在OCaml中创建一个函数,它在数学中执行求和函数。 我试过这个:
sum n m f =
if n = 0 then 0
else if n > m then f
else f + sum (n + 1) m f;;
然而,我得到一个错误 - “字符41-44:否则f * sum(n + 1)m f ;;错误:未绑定的值和 并且总和加下划线(有胡萝卜标志指向它)
我看了这个:Simple OCaml exercise 这是同样的问题,但我看到很多其他我没有的东西。 例如,对于我的n = m情况,我没有f n然后在其他情况下,我没有f m。
如果希望函数返回整数,为什么需要f n? d: 有什么问题!?提前谢谢。
答案 0 :(得分:13)
您忘记了rec
。
let rec sum n m f = ...
对于递归函数,您必须手动包含“rec”关键字。
答案 1 :(得分:4)
您必须使用关键字let
来引入新函数,并在此函数递归时使用let rec
。
为什么第一个参数名为f
?如果它是一个功能,你应该把它应用到某个东西。
if n = 0 then 0
多么奇怪的约定!你确定要这个吗?同意if n > m then f
目前,您的代码等同于
let sum a b c =
if a = 0 then 0
else if a > b then c
else if a < 0 then min (-a*c) ((b-a+1)*c)
else (b-a+1)*c
答案 2 :(得分:0)
# let rec sum c = function
(0,_) -> 0
| (n,m) when n>m -> c
| (n,m) -> c + sum c (n+1,m)
;;
# sum 2 (3,5);;
- : int = 8