type FreqTable = [(Char, Int)]
fTable :: String -> FreqTable
fTable s = [sort $ s, i+1]
where i = 0
正如你所看到的,我正在努力回归一个元组,但我无法理解为什么我所回归的东西是不可接受的。显然,这不是一个完成的程序,它返回一个频率表,但我只是想了解如何在此刻返回这种类型的FreqTable。
此外,我对如何创建频率表的任何提示都会非常感激,因为我对Haskell很新,我不希望答案只是一些垫脚石。
答案 0 :(得分:3)
[(Char,Int)]
的典型元素看起来像
[('a',3),('b',4)]
写
[sort $ s, i+1]
将字符串和整数放在同一个列表中,这是一个错误,因为列表必须是同类的(由具有相同类型的事物组成)。
按照这种方式,sort $ s
与sort s
相同,因此我从现在开始使用后者。
请注意,上面甚至不是对的列表。让我们尝试添加一对:
[(sort s, i+1)]
这是一个正确的列表,但类型为[(String,Int)]
,而不是[(Char,Int)]
,因此它仍然不会。
您需要将(已排序的)字符串拆分为单独的Char
s。这可以通过例如完成。列表理解
[(c,1) | c <- sort s ]
这不是你想要的,但至少有正确的类型。现在,您必须为同一1
...
c
如果要利用某些库函数,请在标准库中查找函数group
。