功能编程成语在球拍/哈希尔中计算最多4个没有突变的数字

Avi*_*oel 1 algorithm scheme haskell functional-programming racket

我计算了4个变量a,b,c和d中字符串中四个字符的出现次数.

现在,我想知道哪个字符出现的次数最多.

我想要一个函数式编程习惯来解决这个问题.

在Haskell中解决它的一种方法如下 -

foldl (\(count1, char1) (count2, char2) -> if count1 > count2 then (count1, char1) else (count2, char2)) (a, "A")  (zip [b, c, d] ["B", "C", "D"])
Run Code Online (Sandbox Code Playgroud)

有人为此问题有其他函数式编程习惯用法吗?

Dan*_*ner 8

在Haskell中,惯用的方法是使用maximumBy:

Data.List Data.Ord> snd . maximumBy (comparing fst) $ zip [4,3,7,1] "abcd"
'c'
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,这里的`maximum`也可以,并进一步保证在一个平局上最大的char将被采用.如果我们想要非常迂腐,那么"maximumBy"在领带上是未定义的,因为它的文档要求"假设函数定义了一个总排序". - 这个要求对我的口味有太大的限制,我想大多数Haskellers会忽略它,因为实际的实现并不需要它. (4认同)
  • 把它放在惯用关联列表表单中,并引入`on`组合器,使用``fst.maximumBy(比较`on`snd)``. (3认同)