2011-05-08 59 views
5

什麼是Haskell中'嵌套'模式。我在任何地方都能聽到這個詞,但我不確定它的實際含義。你如何定義它?任何例子?什麼是Haskell中的嵌套模式?

在此先感謝。

編輯補充:

「模式可以包含文本和嵌套的圖案,如在實施例中(如在課本上請求的引用):

addPair (0,y) = y 

addPair (x,y) = x+y 


shift :: ((Int,Int),Int) -> (Int,(Int,Int)) 

shift ((x,y),z) = (x,(y,z)) 
+0

我猜測它可能與Haskell中大量使用的遞歸邏輯有關。 – Pieter 2011-05-08 10:44:05

+0

@Pieter應該比這更簡單 – maclunian 2011-05-08 10:47:52

+2

小心舉一個你聽到的例子嗎?據我所知,這個詞沒有規範意義。 – Ingo 2011-05-08 10:54:52

回答

6

這意味着可以匹配針對圖案在您的示例中,(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))

+0

詳細說明,如果你可以PLZ? – maclunian 2011-05-08 11:12:27

+0

啊,我現在開始得到它;) – maclunian 2011-05-08 11:17:59

+0

請注意,這是一個不愉快的措辭,恕我直言 - 因爲嵌套通常與詞法範圍相關聯,但模式中的變量必須是線性的,不管嵌套模式有多深。因此,術語*子模式*可能更好(類似於*子表達式*)。 – Ingo 2011-05-08 14:48:54

0

雖然我可能是錯的,我只能從上下文中的「嵌套的」模式會是這樣的addPair x = xaddPair x y = x+y承擔。我相信你的論點是一種模式。在大多數編程語言中,這將是一個簡單的x y。而在這種情況下,你的論點模式可能更復雜,例如(x, y)((x, y), z)

嵌套可能意味着「元組或列表」或「非平面元組或列表」。