mac*_*ian 5 haskell design-patterns nested pattern-matching ghc
什么是Haskell中的'嵌套'模式.我到处都听到这个词,但我不确定它到底意味着什么.你会如何定义它?任何例子?
提前致谢.
编辑添加:(如教科书中所引用)
"模式可以包含文字和嵌套模式,如示例中所示:
addPair (0,y) = y
addPair (x,y) = x+y
shift :: ((Int,Int),Int) -> (Int,(Int,Int))
shift ((x,y),z) = (x,(y,z))
Run Code Online (Sandbox Code Playgroud)
这意味着您可以匹配包含其他模式的模式.在您的示例中,(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) = ()
Run Code Online (Sandbox Code Playgroud)
等等.这也扩展到列表和代数数据类型:
f [[x]] = ()
f' [[[x]]] = ()
g (Just (Just x)) = ()
g' (Just (Just (Just x))) = ()
Run Code Online (Sandbox Code Playgroud)
在这里,f获取列表列表,f'获取列表列表,g获取Maybe包含另一个列表Maybe(即,Maybe (Maybe a)),并g'采取Maybe (Maybe (Maybe a))