2016-11-03 1 views
0

Ich versuche, eine Show 'Funktion zu erstellen, die eine Liste von Tupeln nimmt und eine Zeichenfolge zurückgibt, die nach jedem Tupel eine neue Zeile erstellt. Also es dauern würde, [(x, y), (a, b), (c, d)] und das RückWie gebe ich eine Zeichenfolge als mehrere Zeilen in IO zurück?

xy

ab

cd

, was ich bisher in Form von Code ist

show' :: [(String,Int)] -> String 
show' [] = "" 
show' (x:xs) = (fst x) ++ " " ++ (show (snd x)) ++ " something that will create a newline in IO " ++ show' xs 
+0

Sie können eine neue Zeile in Haskell mit '" \ n "' darstellen. –

+0

Ich habe versucht, indem Sie einfach \ n in die offene Position auf der Zeichenfolge setzen, aber das nur eine Zeichenfolge mit "\ n" drin zurückgegeben. – jazaniac

+0

Vergleichen Sie 'show '...' mit 'putStrLn $ show' ...'. – chepner

Antwort

2

Newlines in Haskell mit "\n" vertreten sein.

Wenn Sie weiterhin Zeichenfolgen auf der Konsole drucken, die die Zeichenfolge \n enthalten, bedeutet dies wahrscheinlich, dass Sie print verwenden. Verwenden Sie stattdessen putStr oder putStrLn.

Sie wollen nicht print verwenden, da es intern verwendet show, die die wörtliche Newline als die Zeichen \ und n kodiert. print ist beim Debuggen nützlicher als im tatsächlichen Produktionscode.

0

Es gibt die Funktion unlines, die Zeilen verbindet und an jede Zeile Zeilenumbrüche anfügt. So können Sie so etwas wie

show' :: [(String, Int)] -> String 
show' xs = unlines $ map (\(x,y) -> (show x) ++ " " ++ (show y)) xs 

Verwenden verwenden putStrLn die Ausgabe drucken sonst werden Sie sehen, ‚\ n‘ statt Newline.

Verwandte Themen