4 ответов:
да здесь:
Prelude> import Data.List Prelude Data.List> intercalate " " ["is","there","such","a","function","?"] "is there such a function ?"
intersperseнемного общий:Prelude> import Data.List Prelude Data.List> concat (intersperse " " ["is","there","such","a","function","?"]) "is there such a function ?"кроме того, для конкретного случая, когда вы хотите присоединиться к символу пробела, есть
unwords:Prelude> unwords ["is","there","such","a","function","?"] "is there such a function ?"
unlinesработает аналогично, только что строки взрываются с использованием символа новой строки и что символ новой строки также добавляется в конец. (Это делает его полезным для сериализации текстовых файлов, которые должны в стандарте POSIX конце пустую строку)
Если вы хотите написать свои собственные версии
intercalateи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)
это не трудно написать один лайнер с помощью foldr
join sep xs = foldr (\a b-> a ++ if b=="" then b else sep ++ b) "" xs join " " ["is","there","such","a","function","?"]
Comments