Home Articles

计算haskell中数组的长度 - 非穷举模式错误[重复]

Asked
Viewed 1046 times
2

这个问题在这里已有答案:

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

在我的讲义中,功能如下:

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

这对我来说是有道理的,它似乎没有遗漏任何东西,我也看到过其他地方发布过的非常相似的东西,但是在GHCi中它会抛出一个“非详尽的模式”错误而且我无法生活我找出原因 .

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

1 Answer

  • 5

    你所拥有的是两个声明,第二个声明影响第一声明 .

    您需要将 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>
    

Related