4

我的 OCaml 程序中有一个错误,我正在寻求帮助。

错误:

This expression has type unit but an expression was expected of type int

带有错误的行错误包含soma = soma

let soma = 0;;
let rec nBell n = 
if n == 0 then 1 
    else
        for k=0 to n-1 do 
        soma = soma + ((fact(n-1)/(fact(k)*fact((n-1)-k))) * nBell(k));
            done;;`

谁能帮我?

4

1 回答 1

9

正如最近在这里多次提到的那样,OCaml 没有任何声明。它只有表达式。为了使if表达式有意义,thenelse部分必须是相同的类型。在您的代码中,then部分是1. 即,它有类型int。在这else部分你有一个for表情。for表达式的类型是unit。这就是编译器所抱怨的。

然而,解决这个问题只是第一步,因为您的代码是基于对 OCaml 变量如何工作的误解。OCaml 之类的变量soma不可变的。你不能改变他们的价值。所以表达式soma = soma + 1实际上是一个比较,告诉两个值是否相等:

# let soma = 0;;
val soma : int = 0
# soma = soma + 1;;
- : bool = false

一般来说,您需要找到一种方法来解决您的问题而不分配给变量;即,不改变他们的价值观。

如果您刚开始使用函数式编程,这似乎很荒谬。然而事实证明,这只是另一种看待事物的方式。

于 2013-10-13T01:17:07.927 回答