此函數使用列表,索引號和替換字符串。它遍歷列表並用替換字符串替換給定索引處的元素。我不確定最後一行的模式是怎麼回事。通過模式匹配替換列表元素
-- 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
此函數使用列表,索引號和替換字符串。它遍歷列表並用替換字符串替換給定索引處的元素。我不確定最後一行的模式是怎麼回事。通過模式匹配替換列表元素
-- 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
您可以且應該將下列其中一行添加到每個Haskell文件的頂部:{-# OPTIONS_GHC -Wall #-}
或{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}
。如果你有其中的一個,那麼它們會在module Foo where
以上。有了其中的一個,註釋掉最後一個模式會給你一個警告,說明什麼是不匹配的。
不要問最後一行匹配什麼,*非常小心*說前兩行匹配。揭示自己,答案會。 – crockeea
爲了清楚起見,它應該寫成'listSet1 [] _ _ = []'。在大多數情況下,有很好的理由避免「全部」模式 - 它們往往會使代碼更難理解,並且在類型定義更改時可能導致無聲破壞。當一個或兩個構造函數需要更改並且其他多個構造函數通過時,它們纔有意義。 – dfeuer