4

我正在尝试在 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: else f * sum(n + 1) mf;; 错误:未绑定的值总和和总和带有下划线(有胡萝卜符号指向它)

我看了这个:简单的 OCaml 练习 这是同一个问题,但我看到了很多其他我没有的东西。例如,对于我的 n = m 情况,我没有 fn,然后在 else 情况下,我没有 f m。

如果你想让函数返回一个整数,为什么需要 fn?D:有什么问题!?提前致谢。

4

3 回答 3

13

你忘了rec

let rec sum n m f = ...

对于递归函数,您必须手动包含“rec”关键字。

于 2012-06-11T22:41:20.517 回答
4
  1. 你必须使用关键字let来引入一个新函数,并且let rec这个函数是递归的。

  2. 为什么第一个参数命名为f?如果它是一个函数,你应该将它应用到某个东西上。

  3. 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
于 2012-06-11T23:35:10.657 回答
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
于 2015-10-11T19:17:22.433 回答