gpt4 book ai didi

haskell - 没有由 lambda 内的长度引起的可折叠实例

转载 作者:行者123 更新时间:2023-12-04 18:59:41 24 4
gpt4 key购买 nike

这里的第一个问题,完全是haskell的菜鸟,所以请善待我:)

我在玩 this 的第 6 题 haskell 练习

最后用这段代码找到了解决方案(或者我希望的类似的东西)

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 - 没有由 lambda 内的长度引起的可折叠实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40642105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com