Я думал, что в своих исследованиях в Haskell я плавно плаваю, пока...
У меня есть [[Int]]
tiles = [[1,0,0]
,[0,1,0]
,[0,1,0]
]
и тип данных:
data Coord = Coord
{ x :: Int
, y :: Int
} deriving (Eq)
На основе ввода tiles
я пытаюсь вывести [Coord]
, так что Coord
генерируется только тогда, когда значение tiles
равно 1, а Coord
будет хранить его позиция в списке 2d:
blackBox :: [[Int]] -> [Coord]
blackBox tiles = <magic>
-- given the above example I would expect:
-- [(Coord 0 0),(Coord 1 1),(Coord 1 2)]
Я пробовал такие вещи, как первая конвертация [[Int]] в [Int], через:
foldTiles :: [[Int]] -> [Int]
foldTiles tiles = foldr (++) [] tiles
но после этого я не уверен, как передавать индексы. Я полагаю, что если бы я мог отображать "сложенные плитки", выводя кортеж (значение, индекс), я мог бы легко выяснить остальное.
update В случае, если кто-то заинтересован, я получил его работу, и вот демонстрация его (с исходным кодом и ссылкой на GitHub)! Мне нужно будет потратить больше времени, чтобы понять каждый из ответов, поскольку это мой первый раз, когда я программировал игру с использованием FP. Большое спасибо!
http://kennycason.com/posts/2013-10-10-haskell-sdl-gameboy-boxxle.html