我想知道如何在Ocaml中构建一个函数,用于List.fold_left查明列表中是否存在元素.例:
exists 3 [1;2;3;4;5]
=> true
Run Code Online (Sandbox Code Playgroud)
这个函数的类型是: a -> bool -> 'a list -> bool
我的想法如何做到如下:
let exists k l = List.fold_left( fun a x-> a=x) k l
Run Code Online (Sandbox Code Playgroud)
但显然是错的.有什么建议怎么办?
let exists k l =
List.fold_left (fun b x -> b || x = k) false l
Run Code Online (Sandbox Code Playgroud)
关于@ tonio答案的两条评论:
||而不是多余的if ... then true else ....=)而不是引用相等(==)来比较值.此外,exists在List模块中可用.内置函数更有效,因为它不必每次都遍历整个列表.
你应该使用类似的东西
let exists k l =
List.fold_left(
fun a x -> if x == k then true else a)
false l
;;
Run Code Online (Sandbox Code Playgroud)
您有一个初始值false,并在迭代列表时传递它.找到搜索到的元素后,将值设置为true,然后传递它.如果列表中的元素不是您搜索的内容,请传递您输入的值:它是初始值false,或者true是否已找到您搜索的元素.