haskell复制功能" + ---- + - +"

时间:2017-04-19 10:43:32

标签: haskell

print_line :: [Int] -> String
print_line numbers = case numbers of
    []      ->  []
    n:ns    -> '+' :replicate n '-' ++ print_line ns

我想要给Print_line函数一个Int列表,例如[8,2]它返回     &#34 + -------- + - +" 此刻的功能将返回" + -------- + - "我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

只需对+案例使用[]

print_line :: [Int] -> String
print_line numbers = case numbers of
    []      ->  "+"
    n:ns    -> '+' :replicate n '-' ++ print_line ns

我没有测试过,自从我最后一次在Haskell编程以来已经有一段时间了。

答案 1 :(得分:3)

添加一个小助手函数,写出你得到的全部东西

import Data.List

printLine :: [Int] -> String
printLine = between '+' . intercalate "+" . map (`replicate` '-')
  where between c str =  c:(str ++[c])

修改

如果我会经常使用这些,我甚至会更进一步做出像

这样的额外功能
fillWith c = map (`replicate` c)
sepBy = intercalate
between c str = c:(str++[c])

所以我可以编写printLine = between '+' . sepBy '+' . fillWith '-',其中读取(Atto / Mega / Parsec-)解析器非常相似,我将编写解析这样的字符串,如果我的话,它还可以灵活地更改整个事物。最终结果字符串应该看起来像|----+-----------+-----||=========|========|========|

答案 2 :(得分:2)

使用Data.List

进行简单的黑客攻击
import Data.List

print_line x=intercalate "+" . map (flip replicate '-') $ [0]++x++[0]