2013-10-13 1 views
3

OCaml의 프로그램에 버그가 있으며 도움을 요청하고 있습니다.이 표현식에는 유형 단위가 있지만 표현식이 int 유형이어야합니다.

오류 :

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;;` 

이 사람이 나를 도와 드릴까요 포함?

답변

7

최근 몇 번 언급했듯이 OCaml에는 진술이 없습니다. 표현 만 있습니다. if 표현식을 이해하려면 thenelse 부분이 동일한 유형이어야합니다. 코드에서 then 부분은 1입니다. 즉, 유형은 int입니다. else 부분에는 for 표현이 있습니다. for 표현의 유형은 unit입니다. 이것이 바로 컴파일러가 불평하는 것입니다.

그러나이 문제를 해결하는 것은 첫 번째 단계 일뿐입니다. 코드가 OCaml 변수의 작동 방식에 대한 오해를 기반으로하기 때문입니다. soma과 같은 OCaml 변수는 불변입니다. 그들의 가치를 바꿀 수는 없습니다. 그래서 표현 soma = soma + 1 실제로 두 값이 같은지 여부를 알려주는 비교입니다 :

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

는 일반적으로, 당신은 변수에 할당하지 않고 문제를 해결하는 방법을 찾을 필요가; 즉, 그 값을 변경하지 않고.

방금 ​​프로그래밍으로 시작했다면, 이것은 터무니없는 것 같습니다. 그러나 사물을 보는 또 다른 방법으로 밝혀졌습니다.

관련 문제