通过高阶函数传递数据

Cha*_*ham 3 haskell

最近我以某种形式出现了这个问题.让我们说我想取一个数字x并将一堆高阶函数应用于x生成y.然后我检查y是否满足某个属性,如果确实如此,那么我想返回x.

当我有一个数字列表[x1,x2..xn]并且我应用的函数压缩列表时,这个问题似乎变得非常棘手.例如,我将一个函数应用于列表中的每个元素(生成[y1,y2 ..]),sort,group,然后我想返回最大组的x值.例如:

head . reverse . sort . map (length) . group . sort . map (mod 4) $ [1..10]
Run Code Online (Sandbox Code Playgroud)

答案是6,但是如何重写这样的函数来告诉我哪些元素1到10属于那些6?

我已经玩过传递元组和使用fst的想法,直到snd是必需的,或者编写一个新类来使它像sort这样的东西只适用于类的一个元素,但我似乎无法出现干净的方法

谢谢您的帮助.

Jer*_*ock 5

这是对代码的一小组更改,它们返回值而不是长度;*By函数的使用避免了使用元组的需要:

maximumBy (compare `on` length) . groupBy ((==) `on` mod 4) . sortBy (compare `on` mod 4) $ [1..10]
Run Code Online (Sandbox Code Playgroud)

此代码需要Data.List和Data.Function.Data.Function包括on,允许比较(用于排序或分组)应用于输入的某些功能.