Haskell 中具有多个参数的部分应用程序

2024-03-27

给定某个函数 f(x1,x2,x3,..,xN),在多个地方部分应用它通常很有用。例如,对于 N=3,我们可以定义 g(x)=f(1,x,3)。然而,Haskell 中的标准部分应用程序并不是这样工作的,它只允许我们通过修复函数的第一个参数来部分应用函数(因为所有函数实际上只接受一个参数)。有没有简单的方法可以做这样的事情:

g = f _ 2 _
g 1 3

输出值为f 1 2 3? 当然我们可以做一个 lambda 函数

g=(\x1 x3 -> f x1 2 x3)

但我发现这很难读。例如,在 Mathematica 中它的工作原理如下,我觉得这非常好:

g=f[#1,2,#2]&
g[1,3]

带输出f[1,2,3].

编辑:也许我应该多说一些关于动机的事情。我想在点式组合中使用这种部分应用的函数,即在如下表达式中:

h = g. f _ 2 . k

to get h 3 = g(f(k(3),2)).


你可以阅读这个问题 https://stackoverflow.com/questions/12129029/how-to-change-the-order-of-arguments关于如何更改参数的顺序,然后使用部分应用程序,但实际上目前在 Haskell 中最干净、最清晰的方法就是直接:

g x y = f x 2 y
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Haskell 中具有多个参数的部分应用程序 的相关文章

随机推荐