从Haskell中的网格返回局部正方形



我有以下网格:

[["a1","b1",    "c1","d1"],
 ["a2","b2",    "c2","d2"],
 ["a3","b3",    "c3","d3"],
 ["a4","b4",    "c4","d4"]]

并且希望在它们的"平方"中提取一系列值,所以我最终得到了一个平方值列表。x值是水平的,y值是垂直的。

我已经启动了以下功能:

type Coordinate = (Int,Int)
return :: [[String]] -> Coordinate -> [String]
return grid (x,y) = .....

其中(0,0)是栅格的左上角。使用上面的函数,我希望能够提取一个正方形,所以我得到这样的结果(如果我的坐标是(2,0),(3,0)、(2,1)、(3,1)):

["c1","d1","c2","d2"]

我已经尝试了一些方法,包括map函数,但需要一些关于如何继续的提示。

我建议如下:

localSquare :: [[a]] -> (Int,Int) -> [[a]]
localSquare xss (x,y) = map (take y . drop n) $ (take x . drop n) xss
  where n = length xss `div` 2
matrix = replicate 10 [1..10]

应用:

> localSquare matrix (5,5)
[[6,7,8,9,10],[6,7,8,9,10],[6,7,8,9,10],[6,7,8,9,10],[6,7,8,9,10]]

如果您确实需要一个纯列表,请只应用类型concat $ localSquare matrix (5,5)

最新更新