Ocaml 在let表达式中使用整数引用
我正在尝试本课程第5课第6步中的代码示例 我们应该修复此代码示例:Ocaml 在let表达式中使用整数引用,ocaml,Ocaml,我正在尝试本课程第5课第6步中的代码示例 我们应该修复此代码示例: let one = let accum = ref -54 in for i = 1 to ten do accum := !accum + i done ; !accum 以下是我的尝试: let one = let accum = ref -54 in ( for i = 1 to 10 do accum := accum + i done ;
let one =
let accum = ref -54 in
for i = 1 to ten do accum := !accum + i done ;
!accum
以下是我的尝试:
let one =
let accum = ref -54 in (
for i = 1 to 10 do
accum := accum + i
done
;
!accum
)
但不幸的是,我收到了错误消息:
第2行,字符14-17:错误:此表达式具有类型“a->”a ref
但表达式应为int类型
-54周围缺少括号
let one =
let accum = ref (-54) in
for i=1 to 10 do
accum := !accum + i
done;
!accum
;;
ref
是一个类型为'a->'a ref
的函数,减号运算符(-)
的类型为int->int->int
。这里,54
是一个int
,但ref
不是,因此类型错误消息。ocaml的lexer的一个奇怪之处是-54
对应两个令牌
因此,您的代码对应于
设累计=参考(-)54英寸
这将产生所提到的类型错误。解决方法是添加括号并写入(-54)
,您还可以使用~-
,这是前缀整数求反运算符,避免了需要包装额外的参数。很好,我不知道这一点。