我该如何检查OCaml中的数字是否在列表中?

时间:2016-09-27 14:59:16

标签: ocaml

为什么我的代码错了?

# 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 - >布尔

2 个答案:

答案 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