lea*_*ode 2 haskell non-exhaustive-patterns
我一直在这里和网上搜索,我找不到任何似乎回答这个问题的东西.我只是刚刚开始在Haskell上学习大学的模块,而我在定义一个函数来计算数组的长度(本质上是预先存在的长度函数)时遇到了问题.
在我的讲义中,功能如下:
let len [] = 0
let len (h:t) = 1 + len t
Run Code Online (Sandbox Code Playgroud)
这对我来说是有道理的,它似乎没有遗漏任何东西,我也看到过其他地方发布过的非常相似的东西,但是在GHCi中它会抛出一个"非详尽的模式"错误而且我无法生活我找出原因.
任何帮助将不胜感激,谢谢
你所拥有的是两个声明,第二个声明影响第一声明.
您需要将len
两个子句声明为一个函数.在GHCi中,你可以这样做:
:{
let len [] = 0
len (h:t) = 1 + len t
:}
Run Code Online (Sandbox Code Playgroud)
该:{ ... :}
表格可以让你输入多行的声明,你会在一个*.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>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1314 次 |
最近记录: |