2017-03-26 4 views
3

私は以前に尋ねられた質問を見てきましたが、少なくとも私はそれらのうちの1つと思っていましたが、私は私の問題を解決する答えを見つけることができません。私は関数内の文字列の間に改行文字を追加しようとしています。私は文字列に「\ n」を追加するたびに、それは単に「\ n」はハスケルの新しい行

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 " |")) 

これは私が

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

を取得しています出力され、私は

を好むを印刷します
"+---+---+---+---+" 
"| | | | |" 

行が別々の行にある場合(また、縦棒の間に3つの空白があると思われますが、私の書式は無視されます)私は主に改行文字を使用しようとしています。ありがとうございました。

答えて

4

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

あなただけputStrまたはputStrLnを使用せずにGHCiの中の文字列式を評価する場合、それはちょうどそれを例えば文字列"foo\n"はGHCiの中"foo\n"として表示されますので、それにショーを呼ぶであろうが、それが改行を含む文字列であり、それがputStrを使用して出力すると、その方法で印刷されるという事実は変わりません。

かいつまんで、あなたはHaskellはその文字列にshowを使用するようにデフォルト設定されますと、それはここであなたのために行っているとそれがはっきり\nを表示するようputStr使用することをお勧めします。

例:

import Data.List 

main = putStrLn(aRow 4) 

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

はハハ、私は実際にそれを試してみましたが、私はかなりダウン型シグネチャを取得できませんでした..あなたはそれで私を助けることができる言語に新しいことしましたか?ありがとう。 – Cameron

+1

@Cameronどのようなタイプの署名ですか? 'putStrLn(aRow 1)' – melpomene

+1

@Cameron私はあなたのコードを私の答えに含めましたが、メルポメーンが示唆しているように、putStrLnを適切に使ってその関数を呼び出す方法を説明しました。今は明らかですか? – jakeehoffmann