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的评论。