iPi*_*o12 5 lambda haskell foldable
第一个问题在这里,完全是haskell上的菜鸟,所以请和我好心:)
我正在玩这个 haskell练习的第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
Run Code Online (Sandbox Code Playgroud)
我想要突出显示的部分是函数'rpt',它计算字符在字符串中重复的次数,例如:"aaba" - > [3313](3来自字母a,它重复3次)"aaccva" - > [332213]
后来我尝试使用lambda和map创建函数,结果如下:
rpt chr list = map (\chr -> length $ filter (== chr)) list
Run Code Online (Sandbox Code Playgroud)
并且首先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
Run Code Online (Sandbox Code Playgroud)
在这里我被卡住了,我无法理解发生了什么......修复这个功能需要什么?
您可能打算过滤掉list,因此为了使您的代码有效,您还需要添加list以下参数filter:
rpt chr list = map (\chr -> length $ filter (== chr) list) list
Run Code Online (Sandbox Code Playgroud)
作为初学者,我会忽略GHCi的建议FlexibleContexts.通常情况下,最终会产生您所拥有的错误消息(或其他令人困惑的东西No instance for (Num (Int -> Bool))).