2016-04-08 13 views
1

Ich versuche, Liste mit Komma zu drucken. Ich habe eine Liste wie ["1","2","3"] und möchte drucken 1,2,3 Wie kann ich das tun?Haskell: Wie jedes Element der Liste mit Komma getrennt

Ich habe versucht:

printList xs = mapM_ (\(a) -> do 
         putStr a 
         putStr (",")) xs 

Aber ich weiß nicht, wie das letzte Komma zu entfernen.

Antwort

4

Sie können intercalate verwenden. Es wird das Komma zwischen jedem Element der Liste eingefügt und die resultierende Liste von Strings verkettet, um sie in eine einzige Zeichenfolge umzuwandeln.

import Data.List 

toCommaSeparatedString :: [String] -> String 
toCommaSeparatedString = intercalate "," 

ghci> toCommaSeparatedString ["1","2","3"] 
"1,2,3" 
3

Dies ist ein bisschen ein XY problem: wie Benjamin Hodgson zeigt, du bist besser aus Ihrer Liste in einen String drehen, und dann Druck, dass - Sie so viel von Ihrer Logik wollen außerhalb von die IO Monade wie möglich.

Aber natürlich, auch wenn Ihre Frage ist etwas in die falsche Richtung von Anfang an, hat es eine Antwort! Welche ist, dass zum Beispiel folgendes schreiben könnte:

printList :: [String] -> IO() 
printList [] = return() 
printList [x] = putStr x 
printList (x:xs) = do 
    putStr x 
    putStr "," 
    printList xs 

Benjamin Antwort ist besser. Aber das könnte IO Monad-Code und do -notation ein bisschen mehr erläutern.

+0

sehr schöne und verständliche Lösung. – lindaon

Verwandte Themen