OCaml求和

时间:2012-06-11 22:37:35

标签: ocaml

我正在尝试在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: 有什么问题!?提前谢谢。

3 个答案:

答案 0 :(得分:13)

您忘记了rec

let rec sum n m f = ...

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

答案 1 :(得分:4)

  1. 您必须使用关键字let来引入新函数,并在此函数递归时使用let rec

  2. 为什么第一个参数名为f?如果它是一个功能,你应该把它应用到某个东西。

  3. if n = 0 then 0多么奇怪的约定!你确定要这个吗?同意if n > m then f

  4. 目前,您的代码等同于

    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