haskell - Haskell 中的嵌套模式是什么?

标签 haskell nested pattern-matching design-patterns 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))

最佳答案

这意味着您可以匹配包含另一个模式的模式。在您的示例中,(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/

相关文章:

haskell - 是否有不能遵守法律的仿函数?

python嵌套字典: OrderedDict from collections

elasticsearch - 在Elasticsearch中,如何从多层嵌套对象的多个字段中搜索字符串

JAVA:(格式塔)模式匹配或替换 difflib.sequencematcher

list - 是否 `(' a' :_)` represent a tuple or a list?

haskell - Cabal 在需要分析库时不安装依赖项?

php - 多个foreach处理嵌套数组——PHP CodeIgniter

scala - 为什么 scala 编译器有时会在 "pattern matching"上发出警告,有时却不会?

ios - 用于匹配字符串中数字的小数部分并修改它的 Swift 正则表达式

haskell - 为什么静态箭头概括了箭头?