Car*_*ine 5 haskell pattern-matching non-exhaustive-patterns
当我运行Haskell程序时,我从GHCI收到以下错误:
"Pattern match(es) are non-exhaustive
In an equation for `recaList': Patterns not matched: (_:_:_)"
Run Code Online (Sandbox Code Playgroud)
我一直在搜索网络/ SO,但似乎无法找到解释的内容(_:_:_).我的猜测只是一个空列表,但我在我的函数中已经考虑到了这一点.
不确定它是否相关,但这是我的程序:
recaList :: [Int] -> [Int]
recaList [] = []
recaList [x] = map recaMan [x]
Run Code Online (Sandbox Code Playgroud)
我认为问题只是我不知道是什么(_:_:_).
Sil*_*olo 11
recaList :: [Int] -> [Int]
recaList [] = []
recaList [x] = map recaMan [x]
Run Code Online (Sandbox Code Playgroud)
这匹配包含一个元素的空列表和列表.您无法匹配包含两个或更多元素的任何列表.我相信你的意思是
recaList :: [Int] -> [Int]
recaList [] = []
recaList xs = map recaMan xs
Run Code Online (Sandbox Code Playgroud)
不需要括号.但是,map如果将其作为输入给出,将返回空列表,因此您的第一种情况也是不必要的.虽然上面的代码片段可行,但这更加惯用.
recaList :: [Int] -> [Int]
recaList xs = map recaMan xs
Run Code Online (Sandbox Code Playgroud)
关于错误语法意味着什么的问题,:是列表构造运算符,因此(x:xs)匹配任何非空列表,将第一个元素绑定到x其余部分xs.(x:y:ys)做同样的事情,但它将第一个x,第二个y和其余部分绑定在一起ys.下划线仅表示忽略的值,因此(_:_:_)匹配至少两个元素的任何列表.编译器告诉您未能匹配此案例.
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |