这里的第一个问题和完全是haskell上的菜鸟,所以请和我好心:)
我正在玩this哈克尔练习的第6号问题
并最终使用此代码
找到解决方案(或我希望的类似内容)combinations gr lis = filter clean $ sequence $ replicate gr lis
where
clean string
| total > gr = False
| otherwise = True
where total = sum [ rpt c string | c <- string]
rpt chr list = length $ filter (== chr) list
我想要突出显示的部分是函数'rpt',它计算字符串中字符重复的次数,例如: “aaba” - &gt; [3313](3来自字母a,重复3次) “aaccva” - &gt; [332213]
稍后我尝试使用lambda和map创建函数,结果如下:
rpt chr list = map (\chr -> length $ filter (== chr)) list
首先ghci告诉我使用FlexibleContext来允许这个,但如果我这样做,它会产生:
<interactive>:7:1:
No instance for (Foldable ((->) [Char]))
arising from a use of ‘rpt’
In the expression: rpt 'a' string
In an equation for ‘it’: it = rpt 'a' string
在这里我陷入了困境,我无法理解发生了什么......修复这个功能需要什么?
答案 0 :(得分:5)
您可能打算过滤list
,因此要使代码正常工作,您还需要添加list
作为filter
的参数:
rpt chr list = map (\chr -> length $ filter (== chr) list) list
作为初学者,我会忽略GHCi对FlexibleContexts
的建议。通常情况下,最终会产生您所拥有的错误消息(或No instance for (Num (Int -> Bool))
等其他令人困惑的错误消息)。