ある関数 f(x1,x2,x3,..,xN) が与えられた場合、いくつかの場所で部分的に適用すると便利なことがよくあります。たとえば、N=3 の場合、g(x)=f(1,x,3) と定義できます。しかし、Haskell の標準的な部分適用はこのようには機能せず、最初の引数を修正することによって関数を部分的に適用することしかできません (すべての関数は実際には 1 つの引数しかとらないため)。このようなことを行う簡単な方法はありますか:
g = f _ 2 _
g 1 3
の値を出力してf 1 2 3
?もちろん、ラムダ関数を実行することもできます
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))
。