"(_:_:_)" Haskell 中是什么意思(GHCI 的非穷举模式匹配错误)?



当我运行我的Haskell程序时,我从GHCI收到以下错误:

"Pattern match(es) are non-exhaustive
 In an equation for `recaList': Patterns not matched: (_:_:_)"

我一直在搜索网络/SO,但似乎找不到(_:_:_)是什么的解释。我的猜测只是一个空列表,但我在我的函数中已经考虑到了这一点。

不确定它是否相关,但这是我的程序:

recaList :: [Int] -> [Int]
recaList [] = []
recaList [x] = map recaMan [x]

我认为问题只是我不知道(_:_:_)是什么。

recaList :: [Int] -> [Int]
recaList [] = []
recaList [x] = map recaMan [x]

这是匹配空列表和包含一个元素的列表。您未能匹配包含两个或更多元素的任何列表。我相信你的意思是

recaList :: [Int] -> [Int]
recaList [] = []
recaList xs = map recaMan xs

不需要括号。但是,如果将空列表作为输入,map将返回空列表,因此您的第一种情况也是不必要的。尽管上面的代码片段会起作用,但这将更惯用。

recaList :: [Int] -> [Int]
recaList xs = map recaMan xs

至于你关于错误语法是什么意思的问题,:是列表构造运算符,所以(x:xs)匹配任何非空列表,将第一个元素绑定到x,其余元素绑定到xs(x:y:ys)执行相同的操作,但它将第一个绑定到x,第二个绑定到y,其余绑定到ys。下划线仅指示忽略的值,因此(_:_:_)匹配至少包含两个元素的任何列表。编译器告诉您,您未能匹配这种情况。

相关内容

  • 没有找到相关文章

最新更新