2013-10-28 2 views
1

숫자 Num.num에 문제가 있습니다. int 대신 Num을 사용해야하지만 프로그램에 오류가 발생했습니다. 도와주세요. 감사.숫자가있는 OCaml 오류 유형

# open Num;; 
# let rec silnia n = 
# if n < 2 
# then 1 
# else n * silnia(n-1) 
# 
# let rec newton n k = 
# silnia n/(silnia k * silnia (n-k)) 
# 
# let bell = [|1;1;2;5;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0|] 
# 
# let i = ref 2 
# let k = ref 0 
# let x = ref 0 
# let z = ref 0 
# let suma = ref 0 
# 
# let n = ref 5;; 

val silnia : Num.num -> Num.num = <fun> 
val newton : Num.num -> Num.num -> Num.num = <fun> 
val bell : Num.num array = [|Num 1;Num 1;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0;Num 0|] 
val i : Num.num ref = {contents = Num 2}val k : Num.num ref = {contents = Num 0} 
val x : Num.num ref = {contents = Num 0} 
val z : Num.num ref = {contents = Num } 
val suma : Num.num ref = {contents = Num 0} 
val n : Num.num ref = {contents = Num 4} 

# if !n != 0 || !n != 1 then 
# while !i <= !n do 
#  while !k <= (!i-1) do 
#  x := newton (!i-1) !k; 
#  suma := !suma + (!x * bell.(!k)); 
#  k := !k + 1 
#  done; 
#  bell.(!k)<-(!suma); 
#  suma:=0; 
#  i:= !i + 1; 
# done;; 
File "", line 5, characters 29-31: 
Error: This expression has type Num.num 
    but an expression was expected of type int 

나는 그것을 고치는 법을 모른다. 그것을 정정하거나 조언을 해주십시오. 감사.

+2

"오류가 발생했습니다"충분히 구체적이지 않습니다. – clcto

+0

이것은 라인 5입니다. # suma : =! suma + (! x * bell. (! k)); 파일 "", 줄 5, 문자 29-31 : 오류 :이 식의 형식은 Num.num 이지만 형식은 int 형식이어야합니다. – czarnywdowiec

답변

1

* 연산자에는 int 피연산자가 필요합니다. Num 모듈에서 *를 사용해야합니다.

업데이트

난 당신이 민 모듈을 열고 있다는 것을 알아 차리지 않았다 - 죄송합니다. 퍼베이시브와 너무 많은 갈등이 있기 때문에 개인적으로 그렇게하지 않을 것입니다.

이제 배열 색인 bell.(!k)에 문제가 있다고 의심됩니다. 인덱스는 int 여야합니다. bell.(int_of_num !k)을 사용할 수 있어야합니다.

+0

이 줄은 어떻게 표시됩니까? # suma : =! suma + (! x * bell. (! k)); – czarnywdowiec

+1

제가 틀렸다고 생각합니다 - 당신은 Num 모듈을 여는 중입니다. 여전히 숫자 유형을 혼합하는 문제가 있습니다. 예 : 배열 인덱스는 int입니다. –

+0

이제 작동 중입니다. 정말 고맙습니다 :) – czarnywdowiec