有任何haskell函数来连接列表与分隔符?
有一个函数来连接列表的元素与分隔符? 例如:
> foobar " " ["is","there","such","a","function","?"] ["is there such a function ?"]
谢谢你的回复!
是的, 有 :
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
工作方式是相似的,只是string使用换行符(因为某种原因换行符也被加到了末尾)。
joinBy sep cont = drop (length sep) $ concat $ map (\w -> sep ++ w) cont
如果你想写你自己的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","?"]