Haskell 中的“嵌套”模式是什么。我到处都听到这个词,但不确定它的实际含义。你会如何定义它?有例子吗?
提前致谢。
编辑添加:(根据要求在教科书中引用)
“模式可以包含文字和嵌套模式,如示例所示:
addPair (0,y) = y
addPair (x,y) = x+y
shift :: ((Int,Int),Int) -> (Int,(Int,Int))
shift ((x,y),z) = (x,(y,z))
最佳答案
这意味着您可以匹配包含另一个模式的模式。在您的示例中,(x, y)
模式包含在较大的 ((x, y), z)
模式内。嵌套可以是任意深度,例如以下所有内容都是合法的:
f ((x2,x0),x1) = ()
f' (((x3, x2),x0),x1) = ()
f'' ((((x4,x3), x2),x0),x1) = ()
f''' (((((x5,x4),x3), x2),x0),x1) = ()
等等。这也扩展到列表和代数数据类型:
f [[x]] = ()
f' [[[x]]] = ()
g (Just (Just x)) = ()
g' (Just (Just (Just x))) = ()
这里,f
接受一个列表的列表,f'
接受一个列表的列表,g
接受一个也许
包含另一个 Maybe
(即 Maybe (Maybe a)
),并且 g'
接受一个 Maybe (也许(也许a))
关于haskell - Haskell 中的嵌套模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5926943/