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」結構中是否有類似的術語? –