我想在Haskell中拼接字符串,也可以从函数中获取整数,像这样:
作为字符串,我该如何实现这个?
arc 13 34 234 3
13 34 234 3 将成为弧函数的参数,我希望输出结果为
"arc(13, 34, 234, 3)"
作为字符串,我该如何实现这个?
arc 13 34 234 3
13 34 234 3 将成为弧函数的参数,我希望输出结果为
"arc(13, 34, 234, 3)"
如何将数字列表连接成字符串?看起来这里可以使用一些 [Int] -> String
函数来帮助。
> concat . intersperse ", " . map show $ [13, 34, 234, 3]
"13, 34, 234, 3"
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)"
如果需要输出 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"
Arc
就是一个无效的函数名。(只有构造函数、类型、模块和类可以以大写字母开头命名。) - Dietrich Epp
arc
函数应该有 4 个Int
参数吗?也许使用 [Int] 更方便? - ДМИТРИЙ МАЛИКОВ