2017-03-26 11 views
3

Ich habe durch vorher gestellte Fragen gesucht und ich kann keine Antwort finden, die mein Problem löst, obwohl ich dachte, mindestens einer von ihnen würde. Ich versuche einfach, einen Zeilenumbruch zwischen meinen Strings innerhalb einer Funktion einzufügen. Immer wenn ich ein „\ n“ in eine Zeichenfolge hinzuzufügen, druckt er einfach die „\ n“Neue Zeile in Haskell

import Data.List 
-- aRow takes number of columns as argument 
-- The idea is to use this function with the number of columns as argument. 
-- Example, if we want 3 columns, we'd say aRow 3, and get "+---+---+---+" 

aRow :: Int -> String 
aRow n = "+" ++ take (4*n) (intercalate "" (repeat "---+")) ++ "\n|" ++ take (4*n) (intercalate "" (repeat " |")) 

Dies ist die Ausgabe ich

"+---+---+---+---+\n| | | | |" 

bekommen und ich würde es vorziehen,

Wo die Zeilen in getrennten Zeilen sind (Auch sollte es 3 Leerzeichen zwischen den vertikalen Balken geben, ignoriere meine Formatierung. Ich versuche hauptsächlich, das Newline-Zeichen zu erhalten). Vielen Dank.

Antwort

4

https://stackoverflow.com/a/5944062/1848654:

Wenn Sie nur einen String-Ausdruck in GHCI bewerten, ohne putStr oder putStrLn zu verwenden, wird es nur Show rufen sie, so zum Beispiel die Zeichenfolge "foo\n" als "foo\n" in GHCI angezeigt wird, aber das ändert nicht die Tatsache, dass es sich um einen String handelt, der einen Zeilenumbruch enthält und auf diese Weise gedruckt wird, sobald Sie ihn mit putStr ausgeben.

Lange Rede kurzer Sinn, können Sie putStr verwenden möchten, wie Haskell zu verwenden show auf dieser Zeichenfolge ausfällt und das wird die \n deutlich angezeigt werden, wie es für Sie hier getan hat.

Beispiel:

import Data.List 

main = putStrLn(aRow 4) 

aRow :: Int -> String 
aRow n = "+" ++ take (4*n) (intercalate "" (repeat "---+")) ++ "\n|" ++  take (4*n) (intercalate "" (repeat " |")) 
+0

Haha, ich habe das wirklich versucht, aber auf die Sprache ist neu konnte ich nicht ganz die Art Signatur runter .. könnten Sie mir helfen mit, dass aus? Vielen Dank. – Cameron

+1

@Cameron Welche Art Unterschrift? 'putStrLn (aRow 1)' – melpomene

+1

@Cameron Ich habe Ihren Code in meine Antwort eingefügt, zusammen mit dem, wie Sie diese Funktion mit putStrLn nennen würden, wie es Melpomene vorgeschlagen hat. Ist es jetzt klar? – jakeehoffmann