我一直在教自己的Haskell一個月左右,今天我正在閱讀第16個問題的解決方案,並提出了一個問題。從列表中刪除第n個元素
這裏是一個鏈接:http://www.haskell.org/haskellwiki/99_questions/Solutions/16
基本上,這個問題是問,使從列表降到每第N個元素的功能。 例如,
*Main> dropEvery "abcdefghik" 3
"abdeghk"
鏈路中第一個解決方案是
dropEvery :: [a] -> Int -> [a]
dropEvery [] _ = []
dropEvery (x:xs) n = dropEvery' (x:xs) n 1
where
dropEvery' (x:xs) n i = (if (n `divides` i) then [] else [x])++ (dropEvery' xs n (i+1))
dropEvery' [] _ _ = []
divides x y = y `mod` x == 0
我的問題是,爲什麼dropEvery定義空列表,而dropEvery」能照顧的情況下,空的清單? 我認爲dropEvery [] _ = []
可以簡單地刪除,修改其他一些句子,如下所示應該與上面完全一樣,看起來更短。
任何人都可以幫我弄清楚這個嗎?
請注意,該函數的參數順序是「錯誤的」;像這樣的函數通常是'Int-> [a] - > [a]',這對於流水線情況通常更有用。爲什麼他們在這個例子中反過來說,我不知道。 – leftaroundabout 2013-04-28 10:22:34