154 votes

Existe-t-il une fonction haskell pour concaténer une liste avec un séparateur ?

Existe-t-il une fonction pour concaténer les éléments d'une liste avec un séparateur ? Par example:

 > foobar " " ["is","there","such","a","function","?"]
["is there such a function ?"]

Merci pour toute réponse !

7voto

Ilya Kharlamov Points 631

Il n'est pas difficile d'écrire une ligne en utilisant foldr

 join sep xs = foldr (\a b-> a ++ if b=="" then b else sep ++ b) "" xs
join " " ["is","there","such","a","function","?"]

4voto

Alexis Points 81

Quelques autres idées d'implémentations d'intercaler et d'intercaler, si quelqu'un est intéressé :

 myIntersperse :: a -> [a] -> [a]
myIntersperse _ [] = []
myIntersperse e xs = init $ xs >>= (:[e])

myIntercalate :: [a] -> [[a]] -> [a]
myIntercalate e xs = concat $ myIntersperse e xs

xs >>= f équivaut à concat (map f xs) .

3voto

Alaya Points 849
joinBy sep cont = drop (length sep) $ concat $ map (\w -> sep ++ w) cont

3voto

Zoey Hewll Points 1571

Si vous vouliez écrire vos propres versions de intercalate et intersperse :

 intercalate :: [a] -> [[a]] -> [a]
intercalate s [] = []
intercalate s [x] = x
intercalate s (x:xs) = x ++ s ++ (intercalate s xs)

intersperse :: a -> [a] -> [a]
intersperse s [] = []
intersperse s [x] = [x]
intersperse s (x:xs) = x : s : (intersperse s xs)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X