所以我试图输出点“(X,Y)\ n”的列表,但我无法使其正常工作。
值X和Y均为浮点数。我尝试了文本格式模块,但无法同时将其与Char和Float一起使用。
任何人都对如何使这项工作有想法吗?
最好的问候
已更新:
format_pts_string cs = [
format ("(" % a % ", " % b % ")")
| c <- cs]
答案 0 :(得分:1)
从问题代码中,我想您希望将Double
对的列表转换为String
的列表,如评论中所述,您可能不需要使用Data.Text.Format
包,因为基本功能show
可以将其正确转换为String
,如下所示:
format_pts_string::[(Double, Double)]->[String]
format_pts_string cs = map (\c-> (show c) ++ "\n") cs
或使用列表理解:
format_pts_string::[(Double, Double)]->[String]
format_pts_string cs = [show c ++ "\n" | c <- cs]
此外,如果需要控制输出格式,可以使用++
来串联String
,下面是一个示例:
format_pts_string::[(Double, Double)]->[String]
format_pts_string cs = map formatPair cs
where formatPair (a, b) = "(" ++ (show a) ++ ", " ++ (show b) ++ ")" ++ "\n"
如果您仍然喜欢使用模块文本格式,则可能需要启用OverloadedStrings
语言扩展以将String
转换为Format
类型以进行通话{ {1}}的功能为:
format
或者不使用{-# Language OverloadedStrings #-}
import Data.Text.Lazy (unpack)
import Data.Text.Format (format)
format_pts_string::[(Double, Double)]->[String]
format_pts_string cs = [unpack $ format "({}, {})\n" (c::(Double, Double))| c <- cs]
语言扩展,而是在OverloadedStrings
中使用formString
,但是它很冗长,因为:
Data.String
答案 1 :(得分:0)
这是您的主意吗?
main = let ps = [
(1.0,1.0),
(2.0,2.0),
(3.0,3.0),
(4.0,4.0),
(5.0,5.0),
(6.0,6.0)
]
in mapM print ps
输出:
(1.0,1.0)
(2.0,2.0)
(3.0,3.0)
(4.0,4.0)
(5.0,5.0)
(6.0,6.0)