2016-04-16 12 views
8

Podczas mojej przygody z Haskellem zacząłem pracować z print i printf.Czy istnieje sposób na drukowanie w formatach printf w Haskell?

chciałem spróbować wydrukować tablicę (no, kilka, ale to dopiero początek) i chciałem użyć formatu "%+.4f", co oznacza, że ​​dostanę:

+2.1234 or -1.2345 

Zauważyłem jednak, że jest to dość Trudno wydrukować tablicę za pomocą printf, więc próbowałem przejść na drukowanie. Wydaje się, że łatwiej jest wydrukować listę w ten sposób, ale nie jestem pewien, jak mogę wydrukować elementy listy przy użyciu tego samego formatu, którego użyłem do printf.

Moja lista wygląda tak:

[-1.2, 2.3, 4.7, -6.850399] 

Odpowiedz

3

dwa warianty, które powinny zrobić to samo, wykorzystując dwa możliwe rodzaje powrotów 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: Dla przejeżdżające dwie listy głęboka

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

Czy mogę zastosować to do listy? Powiedz na przykład [[-1.2, 2.3], [4.7, -6.899]]. Jestem prawie pewien, że mapa nie zadziałałaby, ponieważ zamieniłbym coś, co jest drukowane na niektóre listy. – Xzenon

+0

Znalazłem rozwiązanie, ale w rzeczywistości nie używa ono twojej implementacji. Wciąż chciałbym się dowiedzieć, jak możesz wydrukować listę list, które napisałem powyżej, (używając dowolnego z twoich rozwiązań). – Xzenon

+0

Użyj 'mapM_ (mapM_ (printf ...))', aby wydrukować listę list. – augustss

2

można użyć funkcji w module Numeric. Na przykład „% +. 4f” może być reprezentowana jako

formatFloat x = showFFloat (Just 4) x "" 

Można mapować tej funkcji na liście, aby uzyskać listę pszczół.

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

(ponieważ są już ciągi użyję putStrLn zamiast print pokazać wyjście.)

+0

że d nie robimy tego, co robi "% +. 4f", ponieważ nie pokazuje "+" dla liczb dodatnich. – Xzenon

Powiązane problemy