Recursion OCaml函数编写:使用递归和列表模式匹配定义具有以下类型的函数:

Recursion OCaml函数编写:使用递归和列表模式匹配定义具有以下类型的函数:,recursion,functional-programming,pattern-matching,ocaml,Recursion,Functional Programming,Pattern Matching,Ocaml,使用递归和列表模式匹配定义具有以下类型的函数: 存在:'a->bool->'a列表->bool 该函数应具有以下行为:对于布尔值范围为p和列表为l的任何谓词函数,如果存在某个元素x,且p x的计算结果为true,则存在类型良好的调用p l应计算为true 我是OCaml新手,不知道从哪里开始,任何帮助都会很好 #let rec exists p = function [] -> false | x::_ when p x -> true | _:

使用递归和列表模式匹配定义具有以下类型的函数: 存在:'a->bool->'a列表->bool 该函数应具有以下行为:对于布尔值范围为p和列表为l的任何谓词函数,如果存在某个元素x,且p x的计算结果为true,则存在类型良好的调用p l应计算为true

我是OCaml新手,不知道从哪里开始,任何帮助都会很好

#let rec exists p = function
    []            -> false
  | x::_ when p x -> true
  | _::tl         -> exists p tl;;

val exists : ('a -> bool) -> 'a list -> bool = <fun>
关于模式匹配:

let is_one = function
   1 -> true
 | x -> false

试验


我很乐意提供帮助,但我必须相信你正在上的课程提供了一些材料,可以帮助你学习足够的OCaml来完成作业。这将比从零信息开始更有效。提供一些您自己编写的代码,并解释为什么它似乎不起作用。在OCaml的模块列表中有这样一个函数。如果你在一些虚拟的例子中使用它,你可能会想到如何解决你的问题。谢谢!我很难理解模式匹配,不知您能否详细介绍一下该功能?非常感谢!
let is_one = function
   1 -> true
 | x -> false
let is_one = function
   1 -> true
 | _ -> false    (* _ in any case *)
let is_one = function
   x when x=1 -> true
 | _          -> false 
# is_one 1;;
- : bool = true