我正在尝试在haskell中制作频率表

时间:2014-11-12 14:37:16

标签: haskell frequency

type FreqTable = [(Char, Int)]

fTable :: String -> FreqTable 
fTable s = [sort $ s, i+1]
    where i = 0

正如你所看到的,我正在努力回归一个元组,但我无法理解为什么我所回归的东西是不可接受的。显然,这不是一个完成的程序,它返回一个频率表,但我只是想了解如何在此刻返回这种类型的FreqTable。

此外,我对如何创建频率表的任何提示都会非常感激,因为我对Haskell很新,我不希望答案只是一些垫脚石。

1 个答案:

答案 0 :(得分:3)

[(Char,Int)]的典型元素看起来像

[('a',3),('b',4)]

[sort $ s, i+1]

将字符串和整数放在同一个列表中,这是一个错误,因为列表必须是同类的(由具有相同类型的事物组成)。

按照这种方式,sort $ ssort s相同,因此我从现在开始使用后者。

请注意,上面甚至不是对的列表。让我们尝试添加一对:

[(sort s, i+1)]

这是一个正确的列表,但类型为[(String,Int)],而不是[(Char,Int)],因此它仍然不会。

您需要将(已排序的)字符串拆分为单独的Char s。这可以通过例如完成。列表理解

[(c,1) | c <- sort s ]

这不是你想要的,但至少有正确的类型。现在,您必须为同一1 ...

添加所有这些c

如果要利用某些库函数,请在标准库中查找函数group