我正在编写一个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"]
评估为true
,drop_until_boolean (fun s -> s.[0]='z') ["y"]
评估为false
。
答案 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 *)
也许您可以将此一般结构视为问题的可能解决方案。我希望它有所帮助。