2016-04-16 8 views
8

Auf meiner Suche nach weiteren Erfahrungen in Haskell begann ich mit Print und Printf zu arbeiten.Gibt es eine Möglichkeit, in Haskell mit den Formaten von printf zu drucken?

wollte ich versuchen, ein Array zu drucken (na ja, einige, aber es ist nur ein Anfang) und ich wollte das Format "%+.4f", verwenden, was bedeutet, ich würde:

+2.1234 or -1.2345 

ich aber gemerkt, dass es recht ist schwer, ein Array mit printf zu drucken, also habe ich versucht, zu drucken. Es scheint einfacher zu sein, eine Liste auf diese Weise zu drucken, aber ich bin mir nicht sicher, wie ich die Elemente der Liste mit dem gleichen Format drucken kann, das ich für printf verwendet habe.

Meine Liste sieht wie folgt aus:

[-1.2, 2.3, 4.7, -6.850399] 

Antwort

3

Zwei Varianten, die das gleiche tun sollte, die beiden möglichen Rückgabetypen von printf:

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] 

Edit: Zum Verfahren von zwei Listen tief:

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

Kann ich das auf eine Liste von Listen anwenden? Sagen Sie zum Beispiel [[-1.2, 2.3], [4.7, -6.899]]. Ich bin mir ziemlich sicher, dass map nicht funktionieren würde, weil ich etwas, das gedruckt wird, auf einige Listen abbilden würde. – Xzenon

+0

Ich habe eine Lösung gefunden, aber sie verwendet Ihre Implementierung nicht. Ich wäre trotzdem interessiert zu erfahren, wie Sie die Liste der Listen, die ich oben gepostet habe, ausdrucken können (unter Verwendung einer Ihrer Lösungen). – Xzenon

+0

Verwenden Sie 'mapM_ (mapM_ (printf ...))', um eine Liste von Listen zu drucken. – augustss

2

Sie können die Funktionen im Numeric Modul verwenden. Zum Beispiel „% +. 4f“ als

formatFloat x = showFFloat (Just 4) x "" 

Anschließend können Sie diese Funktion über die Liste Karte dargestellt werden, eine Liste von Strings zu erhalten.

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

(da diese bereits Saiten würde ich putStrLn statt print verwenden, um die Ausgabe zu zeigen.)

+0

Der d tut nicht was "% +. 4f" tut, da es nicht das "+" für die positiven Zahlen zeigt. – Xzenon

Verwandte Themen