我正在尝试定义一个函数,它接受[[Char]]类型的图片并复制每个元素。但是,它需要采用复制的新图像并复制它并垂直附加它。我可以使用“复制”并复制每个元素两次,但我不确定如何复制新图像。我做的是我只是附加了两次复制,但只是水平地“追加”,而不是垂直。这是我的代码:
type Picture = [[Char]]
picture::Picture
picture = ["#", ".", "#"]
replicating::Picture->Picture
replicating pic = concatMap (replicate 2) pic ++ concatMap (replicate 2) pic
main = do
print(replicating picture)
最终我想要实现这个形象:
##..##
##..##
到目前为止,我只有这个:
##..####..##
感谢。
答案 0 :(得分:0)
这对你有用吗?
import Data.List
type Picture = [[Char]]
picture::Picture
picture = ["#", ".", "#"]
replicating::Picture->String
replicating pic = intercalate "\n" $ replicate 2 $
concat $ concatMap (replicate 2) pic
然后您可以调用并显示main
的输出,如下所示 -
main = do
putStrLn (replicating picture)
对于我来说,您正在寻找的输出是一个字符串是不是100%清楚,但如果是这样,您需要额外的concat
来转换类型[String]->String
。
一旦完成,你复制它,最后,intercalate
行为有点像concat
,但是让你在每个被连接的字符串之间插入一些东西(在这种情况下是'\' n'其他人在评论中提到。)
正如@Bheklilr在评论中提到的那样,intercalate "\n"
可以简化为unlines
....如果您在行之间需要其他内容,请使用intercalate
,否则{{1}更清洁。