我以为我在 Haskell 学习中一帆风顺,直到...
我有一个 [[Int]]
tiles = [[1,0,0]
,[0,1,0]
,[0,1,0]
]
和数据类型:
data Coord = Coord
{ x :: Int
, y :: Int
} deriving (Eq)
根据输入tiles
,我一直在尝试输出 a [Coord]
,这样 aCoord
仅在值为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
但在那之后我不太确定如何传递索引。我想如果我可以映射“折叠瓷砖”,输出一个元组(值,索引),我可以很容易地找出其余的。
更新万一有人感兴趣,我让它工作了,这是一个演示(带有源代码和 GitHub 链接)!我将不得不花更多时间来理解每个答案,因为这是我第一次使用 FP 编写游戏。非常感谢!
http://kennycason.com/posts/2013-10-10-haskell-sdl-gameboy-boxxle.html