gpt4 book ai didi

haskell - 如何修复 '*** Exception: Prelude.head: empty list' 这里

转载 作者:行者123 更新时间:2023-12-02 11:22:44 25 4
gpt4 key购买 nike

这是一个作业,要删除相邻的重复项。结果应该像这样 removeAdjacentDuplicates [3,1,2,2,2,2,2,4,4,2,2,3] == [3,1,2,4,2,3]

我知道这里没有必要使用 head,但是不允许使用 [e | 形式的递归和列表推导式] ...]。只有Prelude中的函数是permittet、group等,在其他包中也是不允许的。推荐map zip过滤器concat反向文件夹

例如,不可能这样做:

removeAdjacentDuplicates :: Eq a => [a] -> [a]
removeAdjacentDuplicates (x:xs@(y:_))
| x == y = x:tail (removeAdjacentDuplicates xs)
| otherwise = x:removeAdjacentDuplicates xs

所以我尝试这样

removeAdjacentDuplicates = foldr (\x result -> if ( x == (head result)) then result else (x : result)) []

但是当我测试它时,它抛出 *** 异常:Prelude.head:空列表' 这里

我之前尝试过添加removeAdjacentDuplicates [] = []
但错误是这样的

Equations for ‘removeAdjacentDuplicates’ have different numbers of arguments
H7-1.hs:24:1-32
H7-1.hs:25:1-105
|
24 | removeAdjacentDuplicates [] = []
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...

我不明白问题出在哪里,如何解决?

最佳答案

如果 result[]

x == head result 就会死亡 - 并且 result 肯定是 []foldr 的第一次迭代中,因此当输入列表不需要 foldr 进行任何迭代时添加一个特殊情况可以完全修复大小写错误!

您可以将 x 插入列表中,而不是尝试从 result 列表中提取值;所以考虑使用条件

[x] == take 1 result

相反——它永远不会消亡。

关于haskell - 如何修复 '*** Exception: Prelude.head: empty list' 这里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56615441/

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