我曾以为自己在学习 Haskell 时很顺利,直到...
我有一个 [[Int]]
tiles = [[1,0,0]
,[0,1,0]
,[0,1,0]
]
还有一个数据类型:
data Coord = Coord
{ x :: Int
, y :: Int
} deriving (Eq)
根据输入的 tiles
,我一直在尝试输出一个 [Coord]
,使得只有当 tiles
的值为1时才会生成一个 Coord
,并且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