给定一些函数 f(x1,x2,x3,..,xN),在几个地方部分应用它通常很有用。例如,对于 N=3,我们可以定义 g(x)=f(1,x,3)。然而,Haskell 中的标准部分应用程序不是这样工作的,它只允许我们通过固定它的第一个参数来部分应用一个函数(因为所有函数实际上只接受一个参数)。有没有什么简单的方法可以做这样的事情:
g = f _ 2 _
g 1 3
Run Code Online (Sandbox Code Playgroud)
输出值f 1 2 3? 当然我们可以做一个 lambda 函数
g=(\x1 x3 -> f x1 2 x3)
Run Code Online (Sandbox Code Playgroud)
但我觉得这很不可读。例如,在 Mathematica 中,它是这样工作的,我觉得这很好:
g=f[#1,2,#2]&
g[1,3]
Run Code Online (Sandbox Code Playgroud)
与输出f[1,2,3]。
编辑:也许我应该多谈谈动机。我想在点式组合中使用这种部分应用的函数,即在这样的表达式中:
h = g. f _ 2 . k
Run Code Online (Sandbox Code Playgroud)
得到h 3 = g(f(k(3),2))。