如何在一个整数数组上组合map和replicate

时间:2015-09-06 15:56:19

标签: list haskell

对于学校练习,我需要生成一系列带有给定数字的符号。给定[3,3,2,1]输出"+===+===+==+=+"。 我的方法是使用mapreplicate" ="然后在数组上intercalate" +"最后concat将数组转换为单个字符串。

我的解决方案是这样的(虽然站在膝盖深处错误)

printLine arr = map (replicate "=") arr >>> intercalate '*' >>> concat

正确的语法是什么?或者根本不应该使用地图?

1 个答案:

答案 0 :(得分:4)

你走在正确的轨道上,你只是混淆了一些功能:

  • replicate将取一个数字n并将第二个参数重复n次到一个列表中(因此您的顺序错误 - 您可以使用flip或辅助函数就像我吼过一样)
  • 您必须注意是否需要CharString(例如'=' VS "=") - 阅读类型定义(尝试:t intercalateHoogle)仔细记住:String ~ [Char]
  • intercalate实际上是连接,所以你根本不需要连接

这是一个几乎正常工作的版本:

eqSigns :: Int -> String
eqSigns n = replicate n '='

mixIn :: [Int] -> String
mixIn = intercalate "+" . map eqSigns

尝试一下,看看你是否得到了缺失的部分;)

这里是flip的版本:

mixIn :: [Int] -> String
mixIn = intercalate "+" . map (flip replicate '=')
PS:你是来自ML / F#背景吗?