gpt4 book ai didi

haskell - 每个数字不相等的列表错误工作但在相同的数字上它不起作用

转载 作者:行者123 更新时间:2023-12-02 15:34:51 25 4
gpt4 key购买 nike

下面我展示了输出。我给出了一个数字列表,如果它们不相等,则返回 False 并且其工作正常。但是如果数字列表相等则它不会返回 True。你能检查一下这段代码吗?

la [] = True
la a =
if ((head a )==head (tail a))
then la (tail a)
else False

输出:

Cw2016> la [1,2,2]
False
Cw2016> la [2,2,2]

Program error: pattern match failure: head []

Cw2016> la [2,2,3]
False
Cw2016> la [0,1,3]
False
Cw2016> la [0,0,3]
False
Cw2016> la [0,0,0]

Program error: pattern match failure: head []

Cw2016>

最佳答案

问题是在第二个分支中,您只知道列表的大小至少为 1,但您正在寻找第二个参数。我建议您用模式匹配替换 head 和 tail (这是部分函数):

la [] = True
la (x0:x1:xs) =
if (x0 == x1)
then la (x1:xs)
else False

如果您使用 -W 调用 ghc,您将收到警告,指出您的模式未覆盖 x:[]。您可能想添加此分支:

la (x0:[]) = True

顺便说一句,你应该简化你的表达:

      if (x0 == x1)
then la (x1:xs)
else False

至:

(x0 == x1) && la (x1:xs)

为了更详细地了解您的问题,当 a = [x] 对于某些 x 时,就会出现问题。首先,headtail定义为:

head (x:xs) = x
head [] = undefined

tail (x:xs) = xs
tail [] = undefined

然后,表达式 head (tail a) 的计算结果如下:

  head (tail a)
= { value of a }
head (tail (x:[]))
= { first equation of tail }
head []
= { second equation of head }
undefined

这就是您收到错误的原因。

关于haskell - 每个数字不相等的列表错误工作但在相同的数字上它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40814440/

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