我有以下代码:
open Array
let binSearch a x =
let l = ref 0 in
let r = ref (length a) in
let m = ref 0 in
while l < r do
!m := (!l + !r) / 2; (*line 8*)
if (a.(!m) = x) then
begin
!r := !m;
!l := !r
end
else if (a.(!m) > x) then
!p := !m
else
!l := !m + 1
done;
a.(!l) = x
;;当我试图编译它时,我会得到以下错误:
File "binSearch.ml", line 8, characters 2-4:
Error: This expression has type int but an expression was expected of type
'a ref为什么编译器期望'a ref
发布于 2014-12-16 23:28:19
您不需要将!放在:=操作符的左侧。操作符:=有'a ref -> 'a -> unit类型,换句话说,在左侧应该有对'a的引用,在右边应该有对'a的引用。因此,与其:
!r := !m (* WRONG *)你需要
r := !mhttps://stackoverflow.com/questions/27515675
复制相似问题