OCaml咖喱示例

OCaml咖喱示例,ocaml,currying,Ocaml,Currying,我正在编写一个OCaml函数,它接受函数类型,例如(fun\ux->true)和一个列表。这就是我目前拥有的: let drop_until_boolean (x: 'a -> bool) lst = match lst with | x -> true 当前,该书面语句不能正常工作,因为它的计算结果总是true 当我调用drop\u till\u boolean(fun->true)[时,我希望它返回true,当我调用drop\u till\u boolean(

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

let drop_until_boolean (x: 'a -> bool) lst =
    match lst with
    | x -> true 
当前,该书面语句不能正常工作,因为它的计算结果总是
true

当我调用
drop\u till\u boolean(fun->true)[
时,我希望它返回
true
,当我调用
drop\u till\u boolean(fun->true)[“a”]
时,我希望它返回
false

问题摘要:如何创建一个函数,使其
拖放直到布尔值(fun->true)[
计算结果为
true


另一个例子:
drop_-until_-boolean(fun s->s.[0]='z')[“z”
的计算结果为
true
drop_-until_-boolean(fun s->s.[0]='z')[“y”]
您当前的函数以英语说明如下:

取一个函数,称它为
x
,然后取第二个任意类型的值。检查第二个值。在所有情况下,无论值是什么,都返回true

出现在
match
中的变量
x
是与第二个参数匹配的新变量。因为它只是一个简单的变量,所以总是成功匹配。它与第一个参数(碰巧也被命名为
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 *)

也许你可以考虑一下这个总体结构,作为解决问题的一个可能方案。我希望这会有帮助。

我设法弄明白了我想做什么,可能解释得很糟糕。这就是我想要的

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

对不起,这里没有问题。我用摘要重新编写了我的问题,很抱歉造成混乱。这与咖喱有什么关系?我发布了我真正想做的事情的答案。这是问题更大部分的一部分,这就是为什么我有那个奇怪的名字。这就是整个答案的样子,
let drop_直到_boolean(x:'a->bool)lst=if(x lst),然后为true,否则为false;;let rec drop_直到(x:'a->bool)lst=match lst with |【】->【】h::t->if drop_直到布尔x h,那么lst else drop_直到x t
这相当于
let drop_直到布尔x lst=x lst
,甚至
由于部分应用,let drop_直到布尔x=x
。我不知道这在哪里有用。避免
如果b那么true或者false
。这严格等同于
b