2011-05-27 1 views
2

у меня есть следующие сетки:Возврат местного квадрата из сетки в 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, но вам нужно несколько советов о том, как действовать.

+0

ли я понимаю правильно, что размер локальный квадрат всегда должен быть «n/2 * n/2', когда размер квадратов равен« n * n'? – phynfo

+0

@phynfo думаю. Я почти уверен, что это правильно! – maclunian

+0

Вы пытаетесь извлечь значения из сетки, не так ли? Итак, сетка не всегда будет в таком повторяющемся порядке? Потому что прямо сейчас мы могли преобразовать значения (x, y) в значения «число букв», просто подсчитав буквы алфавита соответствующим образом, не глядя вообще на сетку. – amindfv

ответ

2

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

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)

+0

Я не думаю, что это то, что я после этого. – maclunian

+0

Почему? Когда вы уточняете свою спецификацию, я мог бы уточнить ответ ... – phynfo

+0

Хорошо, я сделал это сейчас, спасибо. – maclunian

 Смежные вопросы

  • Нет связанных вопросов^_^