Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 是否有一个组合函数可以与具有任意数量参数的函数一起工作?_Haskell - Fatal编程技术网

Haskell 是否有一个组合函数可以与具有任意数量参数的函数一起工作?

Haskell 是否有一个组合函数可以与具有任意数量参数的函数一起工作?,haskell,Haskell,函数(::(b->c)->(a->b)->a->c由两个函数组成,每个函数只接受一个参数。如果传递的第二个函数可以包含多个参数,我有时会发现这很有用: (.) :: (b -> c) -> (a1 -> ... -> an -> b) -> a1 -> ... -> an -> c 如果我使用一个函数f作为第二个参数,则会发生以下情况: (g . f) val1 ... valn = g (f val1) val2 ... valn 鉴于

函数
(::(b->c)->(a->b)->a->c
由两个函数组成,每个函数只接受一个参数。如果传递的第二个函数可以包含多个参数,我有时会发现这很有用:

(.) :: (b -> c) -> (a1 -> ... -> an -> b) -> a1 -> ... -> an -> c
如果我使用一个函数
f
作为第二个参数,则会发生以下情况:

(g . f) val1 ... valn = g (f val1) val2 ... valn
鉴于我想:

(g . f) val1 ... valn = g (f val1 ... valn)

有没有替代
的方法或其他方法来实现这一点?

在这些情况下,您始终可以使用
($)
我真的看不出有什么必要——你能举个例子说明你在哪里需要它吗?对于已知数量的参数,你可以编写
(.)的部分应用程序。例如,
((g.).f)
做你想做的事。不过,随着
f
接受更多的参数,情况变得更糟了
hxyz=g(fxyz)
变成
h=((g.).f.)。f
建议的“可变组合函数”问题涵盖了您的文字问题(尽管您可能并不真的希望这样——参见luqui的评论)。另外两个讨论了当您知道要处理多少个参数时的备选方案,类似于@chepner的评论。