Sto provando a creare una funzione che cancelli ogni n elemento da una stringa.Haskell - ha una funzione restituisce un carattere vuoto
dropEvery :: String -> Int -> String
dropEvery str n = map (\(char, indx) -> if indx `mod` n /= 0 then char else ' ') (zip str [1..])
In questo momento sostituisce semplicemente ogni elemento n'th con uno spazio, ma cosa dovrei mettere dopo il "resto" se voglio che ritorni un "char vuoto". Capisco che una cosa del genere non esista in Haskell quindi la domanda è: come dovrei dire a Haskell di non restituire nulla e passare al prossimo char?
Ho provato a inserire "[]" dopo "else", ma naturalmente ho finito per ottenere errori di tipo. concatMap è una buona idea. –
@ RaulŠpilev Il problema deriva dal presupposto che ci sia qualcosa chiamato "empty' Char' ". Questo sarebbe come un "vuoto' Int' "o un" vuoto 'Bool'", puoi avere un 'Int' che è 0, ma non uno che non ha alcun valore (senza contare' indefinito') . Per avere il vuoto, hai bisogno di un contenitore. Le stringhe sono contenitori, poiché sono semplicemente una lista di 'Char's, quindi avendo una funzione' (Char, Int) -> [Char] ', puoi usare' concatMap' su un '[(Char, Int) ] per ottenere un '[Char]'. – bheklilr