列表中没有评估的条件

时间:2017-08-04 13:22:20

标签: ocaml

我是初学者,使用Real World OCaml自学OCaml。

出于某种原因,该行

maxarea = itsct_df.groupby(['FID_preproc','PLANREG_NAME'], as_index=False).Shape_Area.max()

引发错误

错误:此表达式的类型等于:(int - > int - > bool) - > bool但是预期表达类型为bool

这个例子看起来非常简单,我无法弄清楚发生了什么。似乎let contains_1 l = if List.mem l 1 then true;; 没有评估,只是作为一个函数坐在那里?我的OCaml版本是4.05.0。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

首先,您的代码无法正常工作,因为您错过了其他情况。在OCaml中,没有if的{​​{1}}意味着完全不同的东西。所以你可以把你的函数写成

else

但是,你不需要做

let contains_1 l =
  if List.mem l 1 ~equal:(=) then true else false

因为整个表达式无论如何都会等于if <boolean> then true else false

因此,这是你正在尝试编写的内容

<boolean>

评估为

let contains_1 l =
  List.mem l 1 ~equal:(=)

按预期工作:

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

答案 1 :(得分:-3)

解决!我正在返回部分

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

按预期工作。