2014-02-26 35 views
0

我想獲取一個整數列表並重復它們多次,但作爲haskell中的字符串。預期的輸出是:整數字符串列表 - haskell?

> nnn [3,1,5] = ["3-3-3","1","5-5-5-5-5"] 
> nnn [10,2,4] = ["10-10-10-10-10-10-10-10-10-10","2-2","4-4-4-4"] 

現在我覺得我靠近......但我不能完全把整數列表爲String,絕對不知道該怎麼辦了連字符。這裏是我的代碼,到目前爲止,輸出:

nnn :: [Int] -> [[Char]] 
nnn list = map show (map (\x -> take x $ repeat x) list) 

,這讓我:

> nnn [3,1,5] = ["[3,3,3]","[1]","[5,5,5,5,5]"] 

(我關閉至少!)任何人都可以點我在正確的方向在這裏看? :)

+0

'map show' first。搜索[hoogle](http://www.haskell.org/hoogle/?hoogle=a+-%3E+%5Ba%5D+-%3E+%5Ba%5D),該函數使用類型「a」將值置於其他值之間 - > [a] - > [a]',並且您發現'intersperse':「intersperse函數接受一個元素和一個列表,並在列表元素之間插入該元素,例如'intersperse','」abcde「 ==「a,b,c,d,e」'「。 '完成後'concat'。 – AndrewC

回答

5

A 單獨函數重複一個數字成連字符分隔的字符串似乎很有用。轉換爲數字的字符串第一,複製它,並使用intercalate插入各元素之間的連字符和加入他們的行列:

repeatNumber :: Int -> String 
repeatNumber n = intercalate "-" $ replicate n $ show n 

然後nnn是好的和簡單:

nnn :: [Int] -> [String] 
nnn = map repeatNumber 

replicate a btake a $ repeat b

+0

「插入」是不是在前奏,是嗎?所以我將不得不導入Data.List? – user3290526

+0

@ user3290526:是的! – Ryan

+0

是否有類似的前奏功能可以使用,還是會改變一切?哈哈 – user3290526