2016-04-16 2 views
8

В моем стремлении приобрести дополнительный опыт в Haskell, я начал работать с print и printf.Есть ли способ использовать печать с форматами printf в Haskell?

Я хотел, чтобы попытаться напечатать массив (ну, несколько, но это только начало), и я хотел бы использовать формат "%+.4f", то есть я хотел бы получить:

+2.1234 or -1.2345 

Я однако заметил, что это довольно трудно распечатать массив с помощью printf, поэтому я попытался переключиться на печать. Кажется, проще напечатать список таким образом, но я не уверен, как я могу распечатать элементы списка, используя тот же формат, который я использовал для printf.

Мой список выглядит примерно так:

[-1.2, 2.3, 4.7, -6.850399] 

ответ

3

два варианта, которые должны сделать то же самое, используя два возможных типа возвращаемых 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: Для обхода двух списков глубоко:

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, чтобы показать выход.)

+0

что д фактически не делает то, что делает «% +. 4f», так как он не показывает «+» для положительных чисел. – Xzenon

Смежные вопросы