Ho insegnato a me stesso Haskell per circa un mese e oggi stavo leggendo la soluzione del sedicesimo problema e mi è venuta una domanda.Eliminare l'elemento dalla lista
Questo è il link: http://www.haskell.org/haskellwiki/99_questions/Solutions/16
In sostanza, questa domanda chiede di fare una funzione che scende ogni elemento N'th da un elenco. Per esempio,
*Main> dropEvery "abcdefghik" 3
"abdeghk"
La prima soluzione nel link è
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
mia domanda è perché dropEvery definisce il caso di liste vuote mentre dropEvery' può prendersi cura di lista vuota? Penso che dropEvery [] _ = []
possa essere semplicemente eliminato e modificando un po 'di altre frasi come segue dovrebbe funzionare esattamente come sopra e sembra più breve.
Qualcuno può aiutarmi a capire questo?
Si noti che l'ordine degli argomenti di questa funzione è "sbagliato"; funzioni come questa sono solitamente 'Int -> [a] -> [a]', che è normalmente molto più utile per le situazioni di pipeline. Perché l'hanno messo al contrario in quell'esempio, non ne ho idea. – leftaroundabout