如何在Haskell中将Integers连接为字符串?

时间:2012-03-05 16:11:51

标签: string haskell integer concatenation

我想在Haskell和整数中连接字符串 从这样的功能:

arc 13 34 234 3

13 34 234 3将是arc函数的参数,我希望输出像

"arc(13, 34, 234, 3)"

作为String我该如何实现呢?

2 个答案:

答案 0 :(得分:7)

如何将数字列表连接成字符串?看起来某些[Int] -> String功能可以在这里提供帮助。

> concat . intersperse ", " . map show $ [13, 34, 234, 3]
"13, 34, 234, 3"

所以,让我们在该String中添加一些括号和“arc”。

import Data.List (intersperse)

arc :: [Int] -> String
arc nums = "arc(" ++ (concat . intersperse ", " . map show $ nums) ++ ")"

我们得到答案。

> arc  [13, 34, 234, 3]
"arc(13, 34, 234, 3)"

如果你真的需要像Int -> Int -> Int -> Int -> String这样的签名功能:

arc' :: Int -> Int -> Int -> Int -> String
arc' a1 a2 a3 a4 = "arc(" ++ (concat . intersperse ", " . map show $ [a1,a2,a3,a4]) ++ ")"

> arc' 13 34 234 3
"arc(13, 34, 234, 3)"

答案 1 :(得分:5)

如果您想要String输出,典型的技巧是创建ShowS,这只是String -> String的另一个名称。

showsArc :: Int -> Int -> Int -> Int -> ShowS
showsArc a b c d = showString "arc" . shows (a, b, c, d)

>>> showsArc 13 34 234 3 []
"arc(13,34,234,3)"

函数调用结束时的[]只是一个空字符串。它允许您将数据附加到末尾,而不必担心O(N)字符串连接。

>>> showsArc 13 34 234 3 " and some extra text"
"arc(13,34,234,3) and some extra text"