我是Haskell的新手,正在处理代表type Img = [String]
的图像。
我想通过换行将图像向左或向右移动1行或更多行。
我已经手动上下移动图片,代码如下:
moveVer :: Int -> Img -> Img
moveVer n xs = take len $ drop (mod n len) $ cycle xs
where len = length xs
img 1 = XXXXXX OUTPUT = (moveVer (3)(img 1)) = XX
XX XX
XX XXXXXX
XX XXXXXX
XXXXXX XX
现在我试图做同样的事情,但水平移动图像(左或右)。
定义moveHor :: Int -> Img -> Img
答案 0 :(得分:1)
基本算法与垂直移位函数相同,因为String
也是字符列表[Char]
。
您可以将算法推广到move
函数,因为moveVer
的代码实际上只需要一个列表而且不依赖于Img
:
move :: Int -> [a] -> [a]
move n xs = take len $ drop (mod n len) $ cycle xs
where len = length xs
现在,您可以根据moveVer
:
move
函数
moveVer :: Int -> Img -> Img
moveVer = move
由于字符串只是一个字符列表,您可以映射字符串列表并使用move
函数进行水平移动。
moveHor :: Int -> Img -> Img
moveHor n = map $ move n