进行currying时如何保留特定参数?

时间:2019-02-24 00:13:37

标签: ocaml

假设我有一个函数foo x y z-> xyz 现在通常我可以通过给foo x y进行咖喱,然后将其链接到另一个论点。我的问题是,如果我不想更改参数的顺序,但想保持x和z不变,该怎么办。我将如何“惹恼”一个y参数。 也许上下文可能有助于理解:假设我想使用for_all函数将某些内容应用于列表。我的谓词p将列表作为第一个参数,我该怎么做? (请注意,尽管赞赏了一个特定的示例,但我也希望能再次使用更多通用且优雅的(-ish?)方法。 谢谢!

2 个答案:

答案 0 :(得分:1)

查看curring的一种方法是

的快捷方式
fun z -> f x y z

因此,您可以根据需要手动声明相同的内容

fun y -> f x y z

答案 1 :(得分:0)

仅按定义的顺序对参数起作用。因此,重要的是按照您最可能想咖喱它们的顺序指定参数。

因此在f x y z中,您不能使用currying使x和z保持不变。但是您只需定义一个新函数即可:

let f_y y = f 1 y 5

或作为工厂:

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