Haskell的新元素,并尝试构造一个[[(Int, Int)]]
,其中每个元素是其对应的网格位置,由另一个板[[a]]
构建。因此,一个正方形边长3 [[a]]
将创造在索引中抛出元素,元素元组
[[(0, 0), (1, 0), (2, 0)]
,[(0, 1), (1, 1), (2, 1)]
,[(0, 2), (1, 2), (2, 2)]]
(最终我会遍历这个有map (map ...)
到[[a]] -> (Int, Int) -> b
类型的函数来创建一个[[b]]
,所以如果我想的东西大量容易,让我知道)
在Python我可能会做这样的事情:
[[(x,y) for (x,_) in enumerate(board[y])] for (y,_) in enumerate(board)]
也就是说,我会用enumerate
内置构建(index, element)
元组并扔掉元素。
我知道在Haskell我可以这样做:
[[(x,y) | x <- [0..length (board!!y)-1]] | y <- [0..length board-1]]
但在Python(for foo in range(len(bar))
)的各种构造是有点反模式和重气馁。 Haskell也是如此吗?
如果我写的Haskell就像我编写的Python,我会做:
[[(x,y) | (x,_) <- zip [0..] (board!!y)] | (y,_) <- zip [0..] board]
是令人难以接受的?
更一般地说:在Python中,如果它是写得很好并且习惯用法的,我们就会谈论某些“Pythonic”。 “Haskellion”结构中是否有类似的术语? –