2016-04-16 7 views
8

ハスケルでのさらなる経験を得るために私はprintとprintfで作業を始めました。Haskellでprintfの形式でprintを使う方法はありますか?

私は、アレイ印刷してみたかった(いくつかのよくする、が、それは始まったばかりだ)と私はフォーマット"%+.4f"を使用していた、私はなるだろう意味:私はそれはかなりだとしかし気づい

+2.1234 or -1.2345 

をprintfを使って配列を印刷するのは難しいので、印刷するように切り替えました。この方法でリストを印刷する方が簡単ですが、printfで使用したのと同じ書式を使ってリストの要素をどのように印刷することができないのか分かりません。

[-1.2, 2.3, 4.7, -6.850399] 

答えて

3

二つの変種:

putStrLn $ concatMap (printf "%+.4f\n") [-1.2, 2.3, 4.7, -6.850399] 
mapM_ (printf "%+.4f\n") [-1.2, 2.3, 4.7, -6.850399] 

編集:深い二つのリストを横断するため:

putStrLn $ (concatMap . concatMap) (printf "%+.4f\n") [[-1.2, 2.3], [4.7, -6.850399]] 
(mapM_ . mapM_) (printf "%+.4f\n") [[-1.2, 2.3], [4.7, -6.850399]] 
+0

これをリストのリストに適用する方法はありますか?たとえば[[-1.2、2.3]、[4.7、-6.899]と言ってください。私はマップが何らかのリストに印刷されたものをマップするので、マップがうまくいかないと確信しています。 – Xzenon

+0

解決策が見つかりましたが、実際には実装が使用されていません。私はまだあなたが上に投稿したリストのリストを印刷する方法を学ぶことに興味がありますが(あなたのソリューションを使って)。 – Xzenon

+0

'mapM_(mapM_(printf ...))'を使ってリストのリストを出力します。 – augustss

2

あなたはNumericモジュール内の関数を使用することができます。

私のリストは、次のようになります。 「4Fは%+。」

formatFloat x = showFFloat (Just 4) x "" 

のように表すことができる。たとえば、あなたはその後、文字列のリストを取得するには、あなたのリスト上でこの機能をマッピングすることができます。

> map formatFloat [-1.2, 2.3, 4.7, -6.850399] 
["-1.2000","2.3000","4.7000","-6.8504"] 

(これらはすでに、私は出力を表示するためにputStrLnの代わりprintを使用したい文字列なので。)のprintf 2つの可能な戻り値の型を使用して、同じことを行う必要があります

+0

そのD "%+。4f"は正の数の "+"を表示しないので実際にはしません。 – Xzenon

関連する問題