gpt4 book ai didi

haskell - 在haskell中计算数组的长度 - 非详尽模式错误

转载 作者:行者123 更新时间:2023-12-02 21:47:44 24 4
gpt4 key购买 nike

我在这里和网上进行了一般搜索,但找不到任何似乎可以回答这个问题的内容。我刚刚开始在大学的一个模块中使用 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>

关于haskell - 在haskell中计算数组的长度 - 非详尽模式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19231915/

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