2012-03-05 47 views
2

我想連接在Haskell字符串和也整數 從功能是這樣的:如何將整數連接爲Haskell中的字符串?

arc 13 34 234 3 

13 34 234 3將圓弧函數的自變量,我想輸出像

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

爲字符串我怎樣才能實現這個?

+1

你確定你的'arc'功能應該有4'Int'參數呢?也許[Int]會更有用嗎? – 2012-03-05 17:20:15

回答

4

如果您想要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" 
+0

我試過,但ghci中給出˙Arc.hs:30:1: 無效簽名類型:圓弧::詮釋 - >內部 - >內部 - >內部 - >顯示 應該是形式 ::的 ˙ – 2012-03-05 16:33:36

+5

你無法命名以大寫字母開頭的函數(或值):'Arc'在Haskell中是無效的函數名稱。 (只有以大寫字母開頭的構造函數,類型,模塊和類名。) – 2012-03-05 16:38:29

6

數字列表如何連接成一個字符串?看起來像[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)" 
相關問題