【问题标题】:Haskell: moving image on horizontal lineHaskell:水平线上的移动图像
【发布时间】:2023-04-03 01:34:01
【问题描述】:

我是 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

【问题讨论】:

  • 不,你没有“管理”任何东西——它实际上是从你上一个问题的答案中复制和粘贴的。也许真正了解自己在做什么是更好的长期投资。

标签: haskell functional-programming


【解决方案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

现在您可以根据move 重写您的moveVer 函数:

moveVer :: Int -> Img -> Img
moveVer = move

由于字符串只是字符列表,因此您可以映射字符串列表并使用move 函数进行水平移动。

moveHor :: Int -> Img -> Img
moveHor n = map $ move n

【讨论】:

    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2020-09-05
    相关资源
    最近更新 更多