【问题标题】:Calculating the length of an array in haskell - non exhaustive patterns error [duplicate]在haskell中计算数组的长度 - 非详尽模式错误[重复]
【发布时间】:2013-10-07 18:23:47
【问题描述】:

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

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

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

这对我来说很有意义,它似乎没有遗漏任何东西,而且我在其他地方也看到过类似的东西,但是在 GHCi 中它抛出了“非详尽模式”错误,我不能我的生活找出原因。

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

【问题讨论】:

    标签: haskell non-exhaustive-patterns


    【解决方案1】:

    你有两个声明,第二个会影响第一个。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多