Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在haskell中水平和垂直拉伸字符串_Haskell - Fatal编程技术网

如何在haskell中水平和垂直拉伸字符串

如何在haskell中水平和垂直拉伸字符串,haskell,Haskell,我需要通过给定的两个int值的输入,在haskell中水平和垂直拉伸字符串。我有正确的代码,只是不知道如何正确实现: expansion :: Int -> Int -> String -> String expansion extendTo e n m a = setSize e (max n $ nrows a) (max m $ ncols a) a 在这本书中,它规定按作为第一个和第二个参数提供的整数缩放输入图片。例如,如果exPic是图片: #.# ..# 那

我需要通过给定的两个int值的输入,在haskell中水平和垂直拉伸字符串。我有正确的代码,只是不知道如何正确实现:

 expansion :: Int -> Int -> String -> String
 expansion extendTo e n m a = setSize e (max n $ nrows a) (max m $ ncols a) a
在这本书中,它规定按作为第一个和第二个参数提供的整数缩放输入图片。例如,如果exPic是图片:

#.#
..#
那么扩展表达式2的结果应该是:

##..##
##..##
....##
....##
我正在使用的这本书没有给出任何解决方案,否则我就不用问了

这个答案是正确的。您可以使用
.lhs
扩展名保存它,并将其加载到GHCi中。

要拉伸元素列表,我们需要复制每个元素,然后将结果列表缝合到单个列表中。为此,我们将
replicate
函数映射到元素上,然后使用
concatMap
在一个步骤中将结果列表重新缝合在一起:

> stretch :: Int -> [a] -> [a]
> stretch n = concatMap (replicate n)
注意:这也可以定义为无点

现在,我们可以拉伸网格(列表列表),方法是拉伸行,并在行上映射以拉伸其中的元素:

> expand :: Int -> Int -> [[a]] -> [[a]]
> expand n m = stretch n . map (stretch m)
我们是否可以用相同的结果来颠倒顺序(
expand n m=map(stretch m)。stretch n
)?为什么

现在,您的示例中唯一缺少的是在包含换行符的字符串和在换行符上拆分的字符串列表之间来回转换<代码>行和
取消行
将为我们完成此操作。(如果实际应用程序涉及网格而不是字符串,则无需执行此操作。)

在使用
[a]
之前,我们为什么在这里使用
字符串

现在来测试一下:

λ> putStrLn $ expansion 2 2 "#.#\n..#"
##..##
##..##
....##
....##
这个答案是正确的。您可以使用
.lhs
扩展名保存它,并将其加载到GHCi中。

要拉伸元素列表,我们需要复制每个元素,然后将结果列表缝合到单个列表中。为此,我们将
replicate
函数映射到元素上,然后使用
concatMap
在一个步骤中将结果列表重新缝合在一起:

> stretch :: Int -> [a] -> [a]
> stretch n = concatMap (replicate n)
注意:这也可以定义为无点

现在,我们可以拉伸网格(列表列表),方法是拉伸行,并在行上映射以拉伸其中的元素:

> expand :: Int -> Int -> [[a]] -> [[a]]
> expand n m = stretch n . map (stretch m)
我们是否可以用相同的结果来颠倒顺序(
expand n m=map(stretch m)。stretch n
)?为什么

现在,您的示例中唯一缺少的是在包含换行符的字符串和在换行符上拆分的字符串列表之间来回转换<代码>行和
取消行
将为我们完成此操作。(如果实际应用程序涉及网格而不是字符串,则无需执行此操作。)

在使用
[a]
之前,我们为什么在这里使用
字符串

现在来测试一下:

λ> putStrLn $ expansion 2 2 "#.#\n..#"
##..##
##..##
....##
....##

如何垂直拉伸字符串?Haskell
字符串是字符列表。不清楚你所说的“伸展”是什么意思;添加一些所需输出的示例可能会有所帮助。此外,伪代码定义与其类型签名不匹配。如果您有一个表示行的字符串列表,并且需要将ANSI图像拉伸x倍宽和y倍高,您是否只需将单个字符重复x次,并将整行重复y次?然后把结果放在一起。是的,我相信这会起作用。我已经把这些放在一起了,但仍然无法解决我几乎遇到的问题,因为如果我导入图片隐藏(printPicture),我可以让它工作,但我不想这样做,我有
scaleX::[Char]->[Char]->[Char]scaleX行n=foldl(++)“”[replicate n c | c Int->IO()scaleY a n=concat[replicate n line | line Int->IO()缩放n | n如何垂直拉伸字符串?Haskell
字符串是字符列表。不清楚“拉伸”是什么意思;添加一些所需输出的示例可能会有所帮助。此外,伪代码定义与其类型签名不匹配。如果您有一个表示行的字符串列表,并且需要将ANSI图像拉伸x倍宽和y倍高,您是否只需将单个字符重复x次,并将整行重复y次?然后推结果汇总在一起。是的,我相信这会起作用。我已经把这些放在一起了,但仍然无法解决我几乎就要解决的问题,因为如果我导入图片隐藏(printPicture),我可以让它工作,但我不想这样做,我有
scaleX::[Char]->Int->[Char]scaleX行n=foldl(++)“”[replicate n c | c Int->IO()scaleY a n=concat[复制n行|行Int->IO()缩放一个n | n我想在
expand
的定义中,您需要在最后的
stretch m
周围加上括号。至少对我来说,代码保持不变,GHCi抱怨
map
应用于太多参数。@F先生更正了。谢谢!我做到了
stretch n m=map(stretch1 n)。(stretch1 m)
但是所有的工作原理都是一样的。谢谢@Reinhenrich我认为在
扩展
的定义中,在最后的
拉伸m
周围需要括号。至少对我来说,在代码保持不变的情况下,GHCi抱怨
map
应用于太多参数。@F先生更正了。谢谢!我做到了
拉伸n m=map(拉伸1 n)。(stretch1 m)
但所有操作都一样。谢谢@ReinHenrichs