这里的第一个问题,完全是关于haskell的菜鸟,所以请对我好点:)

我在玩this 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

我要强调的部分是函数“rpt”,该函数计算字符在字符串中重复的次数,例如:
“aaba”-> [3313](3来自字母a,重复3次)
“aaccva”-> [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

在这里我被困住了,我无法理解正在发生的事情...修复此功能需要什么?

最佳答案

您可能打算过滤list,因此要使您的代码正常工作,还需要添加list作为filter的参数:

rpt chr list = map (\chr -> length $ filter (== chr) list) list
对于初学者,我建议忽略GHCi关于FlexibleContexts的建议。它通常最终会产生错误消息,例如您所收到的错误消息(或其他令人困惑的消息,例如No instance for (Num (Int -> Bool)))。

关于haskell - 没有可折叠的实例因内部λ长度而产生,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40642105/

10-12 06:16