Ocaml 如何在使用curry时保留特定参数?

Ocaml 如何在使用curry时保留特定参数?,ocaml,Ocaml,假设我有一个函数foo x y z->xyz 现在通常我可以通过给foo x y然后把它链接到另一个论点来做咖喱。我的问题是,如果我不想改变参数的顺序,但我想保持x和z不变,该怎么办。我怎样才能把那变成一场激烈的争论呢。 也许上下文有助于理解:假设我想用for_all函数对列表应用一些东西。我的谓词p将列表作为第一个参数,我该怎么做? 请注意,虽然有一个具体的例子是赞赏的,我也希望更一般和优雅的ish?我可以再次使用的方法。 谢谢 看待咖喱的一个方法是 fun z -> f x y z

假设我有一个函数foo x y z->xyz 现在通常我可以通过给foo x y然后把它链接到另一个论点来做咖喱。我的问题是,如果我不想改变参数的顺序,但我想保持x和z不变,该怎么办。我怎样才能把那变成一场激烈的争论呢。 也许上下文有助于理解:假设我想用for_all函数对列表应用一些东西。我的谓词p将列表作为第一个参数,我该怎么做? 请注意,虽然有一个具体的例子是赞赏的,我也希望更一般和优雅的ish?我可以再次使用的方法。
谢谢

看待咖喱的一个方法是

fun z -> f x y z
因此,您只需手动声明所需的相同内容

fun y -> f x y z

咖喱仅适用于按定义顺序排列的参数。因此,重要的是要按照最可能的顺序指定参数

所以在fxyz中,你不能用咖喱来使x和z恒定。但您可以简单地定义一个新函数:

let f_y y = f 1 y 5
或作为工厂:

let with_constant_x_z f x z = fun y -> f x y z

另一个选项是使用命名参数,在这种情况下,您可以通过名称选择要提供的参数:让foo~x~y~z=…,然后是foo~y:value。