我是Haskell的新手,希望這個問題不是愚蠢的。「List」是否在Haskell的模式匹配中被特別處理?
我見過這麼多的例子,當我有一個名單,我能夠在列表中個別變量的匹配和綁定「組成元素」:
listSizeDesc :: [a] -> String
listSizeDesc [] = "Emtpy"
listSizeDesc (x:xs) = "Something inside"
不過,我盡力去做如:
foo :: Int -> String
foo 0 = "Zero"
foo (n - 1) = "next number is " ++ show n
它不起作用。
在我看來,(n-1)和(x:xs)都描述了參數如何「創建」並將「組件」綁定到參數。 List匹配的方式是專門爲便於遞歸而設計的嗎?因爲在我看來,這個匹配/參數綁定邏輯不適用於除(:)以外的其他函數。
絕對不是一個愚蠢的問題。這是我作爲新手的理解:列表不是「特殊的」。模式匹配適用於:因爲:是列表的類型構造函數。它適用於類型構造函數,但不適用於一般函數。這項工作如何解釋得很好[這裏在WikiBooks](http://en.wikibooks.org/wiki/Haskell/Pattern_matching) –
只要它被問得好,沒有這樣的事情是一個愚蠢的問題。 – hugomg
簡短回答:No. –