给定一些函数 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
得到h 3 = g(f(k(3),2))
.