Uczę się Haskella przez miesiąc lub jakiś czas temu i dzisiaj czytałem rozwiązanie 16. problemu i zadałem pytanie.Upuść n-ty element z listy
Oto link: http://www.haskell.org/haskellwiki/99_questions/Solutions/16
Zasadniczo, to pytanie zadaje zrobić funkcję, która spada każdy element N'th z listy. Na przykład
*Main> dropEvery "abcdefghik" 3
"abdeghk"
Pierwsze rozwiązanie w linku jest
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
Moje pytanie brzmi dlaczego dropEvery definiuje przypadku pustych list podczas dropEvery”może zająć pusta lista? Myślę, że dropEvery [] _ = []
można po prostu wyeliminować i zmodyfikować trochę innych zdań, ponieważ poniższe polecenia powinny działać dokładnie tak samo jak powyżej i wyglądają na krótsze.
Czy ktoś może mi pomóc dowiedzieć się o tym?
Należy zauważyć, że kolejność argumentów tej funkcji jest "zła"; takie funkcje są zwykle "Int -> [a] -> [a]", co jest zwykle znacznie bardziej przydatne w sytuacjach związanych z rurociągiem. Dlaczego w tym przykładzie mówią inaczej, nie mam pojęcia. – leftaroundabout