计算非穷举模式中数组的长度错误



我在这里和网上搜索了一下,我找不到任何似乎可以回答这个问题的东西。我刚刚开始在大学里玩Haskell的一个模块,我在定义一个函数来计算数组的长度(本质上是预先存在的长度函数)时遇到了问题。

在我的讲义中,函数给出如下:

let len [] = 0
let len (h:t) = 1 + len t

这对我来说是有道理的,它似乎没有遗漏任何东西,我也在其他地方看到了非常相似的东西,但在 GHCi 中它抛出了一个"非详尽模式"错误,我一生都无法弄清楚为什么。

任何帮助将不胜感激,谢谢

您拥有的是两个声明,其中第二个声明掩盖了第一个声明。

您需要将len声明为一个包含两个子句的函数。在GHCi中,你可以这样做:

:{
let len [] = 0
    len (h:t) = 1 + len t
:}

:{ ... :} 窗体允许您像在*.hs文件中一样输入多行声明。

GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> let len [] = 0
Prelude> let len (h:t) = 1 + len t -- this shadows the earlier len
Prelude> len [1, 2, 3]
*** Exception: <interactive>:3:5-25: Non-exhaustive patterns in function len 
    -- exception because the new len doesn't handle an empty list
Prelude> :{
Prelude| let len [] = 0
Prelude|     len (h:t) = 1 + len t
Prelude| :}
Prelude> len [1, 2, 3]
3
Prelude>

相关内容

  • 没有找到相关文章

最新更新