我遇到类型为Num.num的问题。 我需要使用Num而不是int,但是程序出错了。 请帮我。感谢。
# 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
我不知道如何修复它。请更正或给我一些建议。感谢。
答案 0 :(得分:1)
*运算符需要int操作数。需要使用Num
模块中的*。
<强>更新强>
我没注意到你正在打开Num模块 - 对不起。我本人不会这样做,因为与普及存在太多冲突。
我现在怀疑你的问题是数组索引bell.(!k)
。索引应该是一个int。您应该可以使用bell.(int_of_num !k)
。