gpt4 book ai didi

Haskell 群函数/第一个元素总是丢失

转载 作者:行者123 更新时间:2023-12-02 14:41:03 26 4
gpt4 key购买 nike

我想编写一个名为 group 的函数,它接受 [a] 类型的列表并返回包含相同字符的 [[a]] 类型列表的列表。以下是预期行为的简单示例:

组 [1,1,2,1,3,3,3] ⇒+ [[1,1],[2],[1],[3,3 ,3]]

组“aaabbcdddd” ⇒+ [“aaa”,“bb”,“c”,“dddd”]

我编写了以下代码,但问题是该代码总是错过原始列表中的第一个元素

group [] = []
group (x:xs) = groupHelper xs x []

groupHelper :: Eq a => [a] -> a -> [[a]] -> [[a]]
groupHelper [] prev fs = fs
groupHelper (x:xs) prev [] = groupHelper xs prev [[x]]
groupHelper (x:xs) prev fs = if (x == prev) then groupHelper (xs) (x) ((init fs) ++ [(last(fs)++[x])])
else groupHelper (xs) x (fs++[[x]])

代码将为此输入生成以下输出。

组 [1,1,2,1,3,3,3] ⇒+ [[1],[2],[1],[3,3,3 ]]

=> 这里第一个列表开头的 1 会丢失

<小时/>

组“aaabbcdddd” ⇒+ [“aa”,“bb”,“c”,“dddd”]

=> 这里第一个列表开头的一个 'a' 将丢失

希望有人能帮我解决这个问题。非常感谢

最佳答案

当您第一次(从组)调用 groupHelper 时,您将传递 prev 参数,但助手仅将其用于比较。解决方案可能是在第一次调用时将第一个项目添加为第一组的第一个元素。像这样:group (x:xs) = groupHelper xs x [[x]]

关于Haskell 群函数/第一个元素总是丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57853849/

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