我正在寫一個函數'printLine',給出一個int列表 - 返回一個包含水平線的字符串。該行的長度應該是整數列表的最大值。例如:Haskell打印水平線
printLine [1, 3, 4, 0]
應該返回:
+----+----+----+----+
(請注意,長度由連字符的數量決定,而不是 '+' - 標誌應該始終有5 '+' - 。招牌)
我已經寫了下面的代碼:
printLine :: [Int] -> String
printLine widthList = concat $ concat $ foldr (:) [["+"]] boundList
where boundList = replicate 4 ("+" : hyphenList)
hyphenList = replicate max "-"
max = maximum widthList
的代碼工作正常,但是,我覺得我已經過度複雜這個功能。例如,我在函數中使用了'concat'兩次。是否有一種「更清潔」的方式去解決這個問題?
你錯過了在開始和結束加號 - 你會得到他們,如果你做了一輪嵌入其他的方式,比如'插入(複製4' - ')(複製5「+」)' –
@DavidFletcher這是一個好主意。我以不同的方式解決了這個問題,以儘可能地接近OP。 – redneb