2013-10-28 86 views
1

我有類型Num.num的問題。 我需要使用Num來代替int,但程序出錯。 請幫幫我。謝謝。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)。該指數應該是一個整數。你應該可以使用bell.(int_of_num !k)

+0

該行應如何顯示? #!suma:=!suma +(!x * bell。(!k)); – czarnywdowiec

+1

我想我錯了 - 你打開Num模塊。你仍然有混合數字類型的問題。例如,數組索引是int。 –

+0

現在它工作。非常感謝 :) – czarnywdowiec