Ocaml 列表中的条件不计算

Ocaml 列表中的条件不计算,ocaml,Ocaml,我是一个初学者,用真实世界的OCaml自学OCaml 由于某种原因,这条线 let contains_1 l = if List.mem l 1 then true;; 抛出错误 错误:此表达式的类型为equal:int->int->bool->bool,但表达式的类型应为bool 这个例子看起来非常简单,我不知道发生了什么。看起来List.meml1不是在计算,只是作为一个函数坐在那里?我的OCaml版本是4.05.0。任何帮助都将不胜感激。已解决!我在退一部分 let contai

我是一个初学者,用真实世界的OCaml自学OCaml

由于某种原因,这条线

let contains_1 l =
    if List.mem l 1 then true;;
抛出错误

错误:此表达式的类型为equal:int->int->bool->bool,但表达式的类型应为bool


这个例子看起来非常简单,我不知道发生了什么。看起来List.meml1不是在计算,只是作为一个函数坐在那里?我的OCaml版本是4.05.0。任何帮助都将不胜感激。

已解决!我在退一部分

let contains_1 l =
    if List.mem l 1 ~equal=(=) then true;;

按预期工作。

首先,您的代码无法工作,因为您缺少一个else案例。在OCaml中,如果没有else,则表示完全不同的事情。所以你可以把你的函数写成

let contains_1 l =
  if List.mem l 1 ~equal:(=) then true else false
但是,你不需要这样做

if <boolean> then true else false
这评估为

val contains_1 : int list -> bool = <fun>

那么真正的工作原理是什么呢?在非单位情况下,打字机应该需要一个else子句,您可以完全去掉if,只返回布尔值。我投了反对票,因为您的代码仍然无效。有关详细信息,请参阅我的答案。
val contains_1 : int list -> bool = <fun>
contains_1 [1;2;3;4];;
- : bool = true

contains_1 [2;3;4;5];;
- : bool = false