对于学校练习,我需要生成一系列带有给定数字的符号。给定[3,3,2,1]
输出"+===+===+==+=+"
。
我的方法是使用map
和replicate
" ="然后在数组上intercalate
" +"最后concat
将数组转换为单个字符串。
我的解决方案是这样的(虽然站在膝盖深处错误)
printLine arr = map (replicate "=") arr >>> intercalate '*' >>> concat
正确的语法是什么?或者根本不应该使用地图?
答案 0 :(得分:4)
你走在正确的轨道上,你只是混淆了一些功能:
replicate
将取一个数字n
并将第二个参数重复n次到一个列表中(因此您的顺序错误 - 您可以使用flip
或辅助函数就像我吼过一样)Char
或String
(例如'='
VS "="
) - 阅读类型定义(尝试:t intercalate
或Hoogle)仔细记住: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#背景吗?