【问题标题】:OCaml Function Writing: Use recursion and list pattern matching to define a function exists with the following type:OCaml 函数编写:使用递归和列表模式匹配来定义函数存在以下类型:
【发布时间】:2016-01-10 15:40:21
【问题描述】:

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

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

【问题讨论】:

  • 我愿意为您提供帮助,但我必须相信您正在参加的课程提供了某种材料,可以帮助您学习足够的 OCaml 来完成作业。这将比从零开始关于 SO 的信息更有效。提供一些您自己编写的代码,并解释为什么它似乎不起作用。
  • OCaml的模块List中有这样的功能。也许如果您在一些虚拟示例中使用它,您可能会知道如何解决您的问题。

标签: recursion functional-programming pattern-matching ocaml


【解决方案1】:
#let rec exists p = function
    []            -> false
  | x::_ when p x -> true
  | _::tl         -> exists p tl;;

val exists : ('a -> bool) -> 'a list -> bool = <fun>

测试:

# exists ((=)2) [4;3;2;1];;
- : bool = true
# exists ((=)2) [1;4];;
- : bool = false

关于模式匹配:

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

【讨论】:

  • 谢谢!我很难理解模式匹配,想知道您是否可以详细说明该功能?将不胜感激!
猜你喜欢
  • 2019-02-26
  • 1970-01-01
  • 2011-03-03
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2012-10-17
相关资源
最近更新 更多