最近我以某种形式出现了这个问题.让我们说我想取一个数字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这样的东西只适用于类的一个元素,但我似乎无法出现干净的方法
谢谢您的帮助.
这是对代码的一小组更改,它们返回值而不是长度;*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,允许比较(用于排序或分组)应用于输入的某些功能.