如何解决ocaml int和unsigned int
我正在尝试在ocaml数组中找到某个整数的最后一次出现:
let rec findLastHelper l i loc ret =
match l with
| [] -> ret
| x::xs ->
match x == i with
| true -> findLastHelper xs i (loc+1) loc
| _ -> findLastHelper xs i (loc+1) ret ;;
let findLast l i = (findLastHelper l i 0 -1) ;;
(* let findLast l i = (findLastHelper l i 0 493) ;; *)
let main = Printf.printf "%d\n" (findLast [ 1 ; 6 ; 8 ; 2 ; 9 ; 8 ] 7) ;;
如果整数不存在,则代码应返回-1
。编译时,出现以下错误:
$ ocamlopt main.ml -o main
File "main.ml",line 9,characters 20-40:
Error: This expression has type int -> int
but an expression was expected of type int
当我用任意的正值(上面的493)替换-1
时,一切正常。
这是怎么回事?
解决方法
OCaml在这种情况下将-
解释为二进制运算符。您必须括号(-1)
。
这是常见的OCaml陷阱。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。