OCaml currying示例

时间:2017-09-30 17:03:17

标签: ocaml currying

我正在编写一个OCaml函数,它接受一个函数类型,例如(fun _ -> true)和一个列表。这就是我目前所拥有的:

let drop_until_boolean (x: 'a -> bool) lst =
    match lst with
    | x -> true 

目前,书面陈述无法正常运作,因为它总是评估为true

当我致电drop_until_boolean (fun _ -> true) []时,我希望它返回true,当我致电drop_until_boolean (fun _ -> true) ["a"]时,我希望它返回false

问题摘要:如何创建drop_until_boolean (fun _ -> true) []评估为true的函数。

另一个示例:drop_until_boolean (fun s -> s.[0]='z') ["z"]评估为truedrop_until_boolean (fun s -> s.[0]='z') ["y"]评估为false

2 个答案:

答案 0 :(得分:0)

我设法弄清楚我想做什么,可能做了一个糟糕的工作来解释它。这就是我想要的。

let drop_until_boolean (x: 'a -> bool) lst = if (x lst) then true else false

答案 1 :(得分:-1)

您当前的功能如下所示:

  

获取一个函数,将其称为x,以及任何类型的第二个值。检查第二个值。在所有情况下,无论值多少,都返回true。

x中显示的变量match是与第二个参数匹配的新变量。由于它只是一个简单的变量,因此总是成功匹配。它与第一个参数(恰好也称为x)无关。

此函数始终返回true应该不足为奇。

我完全不确定你想要的功能。该名称表明它将返回您给出的列表的一些尾随部分。但你似乎在说它应该返回一个布尔值。

让我们假设你想用第二个参数做一些相当简单的事情。你说第二个参数是一个列表。简单列表处理函数最常见的结构如下:

let rec my_function list =
    match list with
    | [] ->
        (* Handle case of empty list *)
    | head :: rest ->
        (* Handle case of non-empty list,
           probably with recursive call *)

也许您可以将此一般结构视为问题的可能解决方案。我希望它有所帮助。