所以我做了 4 个函数,“所有”函数都在空数组上返回错误
--
myLength1 :: (Num b) => [a] -> b
mylength1 [] = 0
myLength1 (_:as) = 1 + myLength1 as
--
myLength2 :: [a] -> Integer
mylength2 [] = 0
myLength2 (_:as) = 1 + myLength2 as
myLength3 :: (Num b) => [a] -> b
mylength3 [] = 0
myLength3 (a:[]) = 1
myLength3 (a:as) = 1 + myLength3 as
myLength4 :: [a] -> Integer
mylength4 [] = 0
myLength4 (a:[]) = 1
myLength4 (a:as) = 1 + myLength4 as
Run Code Online (Sandbox Code Playgroud)
ghci 输出
HCi, version 8.6.5: http://www.haskell.org/ghc/ :? for help
Prelude>
Prelude> :load myLength.hs
[1 of 1] Compiling Main ( myLength.hs, interpreted )
Ok, one module loaded.
*Main> myLength1 ""
*** Exception: myLength.hs:4:1-36: Non-exhaustive patterns in function myLength1
*Main> myLength2 ""
*** Exception: myLength.hs:9:1-36: Non-exhaustive patterns in function myLength2
*Main> myLength3 ""
*** Exception: myLength.hs:(13,1)-(14,36): Non-exhaustive patterns in function myLength3
*Main> myLength4 ""
*** Exception: myLength.hs:(18,1)-(19,36): Non-exhaustive patterns in function myLength4
*Main>
Run Code Online (Sandbox Code Playgroud)
异常消息并不是很有帮助,myLength1实际上是从http://learnyouahaskell.com/syntax-in-functions#pattern-matching复制的 。
我希望有人能向我解释什么是错的。
谢谢大家的指教!!
显然我有一个错字,但是haskell编译器不应该抱怨这个吗?
我试过
myLength1 :: (Num b) => [a] -> b
myLength2 :: [a] -> Integer
myLength3 :: (Num b) => [a] -> b
myLength4 :: [a] -> Integer
myLength4 [] = 0
myLength4 (a:[]) = 1
myLength4 (a:as) = 1 + myLength4 as
myLength3 [] = 0
myLength3 (a:[]) = 1
myLength2 [] = 0
myLength2 (_:as) = 1 + myLength2 as
myLength1 [] = 0
myLength1 (_:as) = 1 + myLength1 as
Run Code Online (Sandbox Code Playgroud)
一切都很好......而且它是不可理解的......我现在才意识到但是haskell是一种可以在任何地方编写的语言......就像我不必保持我的$#!t干净,只要它不臭。
这是一个相当简单但很难发现的问题。让我们以 myLength1 为例:
myLength1 :: (Num b) => [a] -> b
mylength1 [] = 0
myLength1 (_:as) = 1 + myLength1 as
Run Code Online (Sandbox Code Playgroud)
您在第 1 行将函数定义为 myLength1。但是,在第 2 行,您使用名为 mylength1 的函数进行模式匹配。您收到错误“函数中的非详尽模式”的原因是第 2 行未被识别为您的基本情况,因为它们没有使用相同的函数名称。
您的其余功能似乎就是这种情况。
希望这是有道理的!
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |