为什么我的代码错了?
# let ls = [1;2];;
val ls:int list = [1; 2]
# let inList a l = List.exists a l;;
val inList:('a - > bool) - > '列表 - > bool =
# inList 1 ls;;
错误:此表达式的类型为int,但表达式需要类型 'a - >布尔
答案 0 :(得分:1)
List.exists
的第一个参数是一个函数,如果元素是您要查找的元素,则返回true,否则返回false。您正在提供int 1
,这不是一个功能。
你需要一个像这样的函数looking_for
:
let inList a l =
let looking_for x = ... in
List.exists looking_for l
如果looking_for
是您正在寻找的内容(即,如果它等于x
),则函数a
应返回true,否则返回false。 / p>
答案 1 :(得分:1)
好吧,你可以看到:
# let inList a l = List.exists a l;;
val inList :(' a - > bool) - > '列表 - >布尔
因此a
的类型为'a -> bool
,这意味着a
是列表中每个元素的谓词。
你想写的是
let inList a l = List.mem a l
val inList:' a - > '列表 - >布尔
TL; DR RTFM ;-) http://caml.inria.fr/pub/docs/manual-ocaml/libref/List.html