![]() |
1
18
通常只使用lambda:
是类似“f”的函数,但第三个参数绑定到42。 你也可以使用组合器(就像有人在评论中提到过哈斯克尔的“flip”),它可以重新排序参数,但我有时会觉得很混乱。 请注意,大多数课程化函数都是这样编写的,因此最可能部分应用的参数首先出现。 f具有方法的命名参数(不允许绑定函数值),但这些名称适用于“tupled”参数。命名的curried参数没有多大意义;如果我有一个两参数的curried函数“f”,我希望给出
那么“g”或“h”可以替换为“f”,但“named”参数不一定使其为真。也就是说,“命名参数”与语言设计的其他方面的交互很差,我个人不知道“命名参数”与“一流的课程函数值”交互良好的现成设计。 |
![]() |
2
5
ocaml是f所基于的语言,它有标记(和可选)的参数,可以按任意顺序指定,您可以根据这些参数的名称部分应用函数。我不相信F有这个功能。
你可以尝试创造一些像哈斯克尔的
|
![]() |
3
5
只是为了完整性——既然您询问了其他功能语言——这就是您在ocaml中的做法,可以说是f的“母亲”:
因此,在ocaml中,只需使用参数的名称,就可以对所需的任何命名参数进行硬编码。(
正如您发现的那样,Microsoft选择不实现此功能…在我看来,这不是“与语言设计其他方面的不良互动”…这更有可能是因为这需要额外的努力(在语言实现中)以及将语言带到世界上所造成的延迟——事实上,只有少数人会(a)意识到OCAML的“逐步下降”,(b)无论如何使用命名函数参数。 我是少数人,确实使用它们——但它确实是F中的一个很容易模仿的地方函数绑定:
|
![]() |
4
4
在python中,可以使用
|
![]() |
5
3
可以不声明就这么做,但我同意 Brian 那个 a lambda or a custom function is probably a better solution . 我发现,我最经常希望这部分应用除法或减法。
概括起来,我们可以声明一个函数
为了遵循逻辑,可能有助于定义函数,因此:
现在
将上面的第一个示例与以下示例进行比较:
还要比较这些:
或者,比较:
lambda版本似乎更容易阅读。 |