【发布时间】:2018-08-19 22:01:25
【问题描述】:
我正在通过 Miran Lipovaca 的“Learn You a Haskell for Great Good!”学习 Haskell。在第 82 页它说
如果模式匹配失败,列表推导将继续移动到下一个元素,失败的元素不会包含在结果列表中。
例子:
ghci> let xs = [(1,3),(4,3),(2,4),(5,3),(5,6),(3,1)]
ghci> [a+b | (a, b) <- xs]
[4,7,6,8,11,4]
我的问题是模式匹配如何失败? 他这是什么意思?我真的不明白。这可能是因为我的英语不好。我请你举个例子,因为我认为这本书没有给出任何模式匹配失败的例子。
我想过如果列表包含列表理解无法处理的类型,那么它会移动到下一个元素,但如果我以这种方式更改列表:
let xs = [(1,3),(4,3),(2,4),(5,3),True,(5,6)]
然后它甚至无法编译,因为它“无法匹配预期的类型”...
【问题讨论】:
-
试试
[a | (a, 3) <- xs]。 -
非常感谢。 :) 现在我知道是什么意思了!
-
模式确实是 (a,b) 就像在函数中一样 (\ab -> a+b) 1 2 --vs-- ((a,b) -> a+b) (1,2), (ab) 在你的例子中会失败。您可以使用单个变量 a
标签: haskell functional-programming pattern-matching list-comprehension