什么是Haskell中的“嵌套”模式?我到处都听到这个术语,但不确定它实际上是什么意思。你如何定义它?有任何示例吗?
谢谢提前。
编辑后添加:(按照要求在教科书中引用)
“模式可以包含文字和嵌套模式,例如:
addPair (0,y) = y
addPair (x,y) = x+y
shift :: ((Int,Int),Int) -> (Int,(Int,Int))
shift ((x,y),z) = (x,(y,z))
什么是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 (Maybe a)
),而 g'
接受一个 Maybe (Maybe (Maybe a))
虽然我可能错了,但我只能从上下文中推断出“未嵌套”模式可能是像addPair x = x
或addPair x y = x+y
这样的东西。我相信你的参数是一个模式。在大多数编程语言中,这将是一个简单的x y
。而在这种情况下,你的参数模式可能会更加复杂,例如(x, y)
或((x, y), z)
。
嵌套可能意味着“元组或列表”或“非平面元组或列表”。