2015-10-06 69 views
0

此函數使用列表,索引號和替換字符串。它遍歷列表並用替換字符串替換給定索引處的元素。我不確定最後一行的模式是怎麼回事。通過模式匹配替換列表元素

-- e.g., listSet1 ["a","x","k"] 2 "d" = ["a", "d","k"] 
listSet1 (x:xs) 1 y = y:xs 
listSet1 (x:xs) n y = x : listSet1 xs (n-1) y 
listSet1 xs _ _ = xs 
+0

不要問最後一行匹配什麼,*非常小心*說前兩行匹配。揭示自己,答案會。 – crockeea

+0

爲了清楚起見,它應該寫成'listSet1 [] _ _ = []'。在大多數情況下,有很好的理由避免「全部」模式 - 它們往往會使代碼更難理解,並且在類型定義更改時可能導致無聲破壞。當一個或兩個構造函數需要更改並且其他多個構造函數通過時,它們纔有意義。 – dfeuer

回答

2

最後一個模式處理列表的末尾。除非您嘗試更換列表中沒有的索引,否則您將不會注意到它(嘗試它!)

+0

謝謝!在發表評論之後,我發現它已經涵蓋所有的聲明。 – user124659

1

您可以且應該將下列其中一行添加到每個Haskell文件的頂部:{-# OPTIONS_GHC -Wall #-}{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}。如果你有其中的一個,那麼它們會在module Foo where以上。有了其中的一個,註釋掉最後一個模式會給你一個警告,說明什麼是不匹配的。