Вернуть местную площадь из сетки в Haskell - PullRequest
2 голосов
/ 27 мая 2011

У меня есть следующая сетка:

[["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, но мне нужно несколько советов о том, как действовать.

1 Ответ

2 голосов
/ 27 мая 2011

Я предлагаю следующее:

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)

...