gpt4 book ai didi

ocaml - 如何 curry 函数 w.r.t. OCaml 中的可选参数

转载 作者:行者123 更新时间:2023-12-04 17:11:51 24 4
gpt4 key购买 nike

假设一个函数 bind有一个标签参数、可选参数和未标签参数,你想定义一个方法 m应用 bind 的未标记参数并返回部分应用的函数,以便 m 的用户可以应用 bind 的标记或可选参数.你怎么做到这一点?简单写method m = bind a b [...] z导致编译器认为省略了可选参数。

最佳答案

可选参数的位置(在函数声明或函数类型中)很重要:它们仅在应用下一个非可选参数时隐式应用。

如果你想要一个参数的部分应用p不应用可选参数 ?o , 放 ?o之后 p在函数声明中。

对比

# let f ?o p ~z = ();;
val f : ?o:'a -> 'b -> z:'c -> unit = <fun>
# f 1;;
- : z:'_a -> unit = <fun> (* ?o applied *)

和:
# let f p ?o ~z = ();;
val f : 'a -> ?o:'b -> z:'c -> unit = <fun>
# f 1;;
- : ?o:'_a -> z:'_b -> unit = <fun> (* ?o not applied *)

如果您不想更改定义顺序,或者想部分更改
应用所有非可选参数,您需要明确捕获
将隐式传递的可选参数:
# (fun ?o () -> f ?o 1 ~z:2);;
- : ?o:'a -> unit -> unit = <fun>

如果您不熟悉它, ?o调用站点的语法是
非常方便:它需要一个 'a option并做正确的事
透明地将可选参数(无论是否应用)传递给
被叫方。

我添加了最后一个 ()参数以保留那里的属性
在可选参数之后至少是一个非可选参数。可以不这样做,但这会变得棘手,不建议这样做。

关于ocaml - 如何 curry 函数 w.r.t. OCaml 中的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9647307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com