Neu bei Haskell und versuchen, eine [[(Int, Int)]]
zu konstruieren, wobei jedes Element seine entsprechende Gitterposition hat, die aus einer anderen Platine [[a]]
aufgebaut ist. Daher ist eine quadratische [[a]]
der Seitenlänge 3 schaffen würdeElement im Index wegwerfen, Elementtupel
[[(0, 0), (1, 0), (2, 0)]
,[(0, 1), (1, 1), (2, 1)]
,[(0, 2), (1, 2), (2, 2)]]
(schließlich werde ich mit einem map (map ...)
in Abhängigkeit von Art über diese werden Iterieren [[a]] -> (Int, Int) -> b
einen [[b]]
zu schaffen, also wenn ich etwas fehlt bin massiv einfacher, lassen Sie mich wissen)
In Python ich mag etwas tun könnte:
[[(x,y) for (x,_) in enumerate(board[y])] for (y,_) in enumerate(board)]
das heißt, ich habe die enumerate
builtinzu konstruieren, verwenden würde, 0 Tupel und wegwerfen das Element.
Ich weiß, in Haskell ich tun kann:
[[(x,y) | x <- [0..length (board!!y)-1]] | y <- [0..length board-1]]
aber diese Arten von Konstruktionen in Python (for foo in range(len(bar))
) sind ein bisschen ein anti-Muster und stark abgeraten. Trifft das auch in Haskell zu?
Wenn ich die Haskell schreiben waren, wie ich die Python schreiben würde, würde ich tun:
[[(x,y) | (x,_) <- zip [0..] (board!!y)] | (y,_) <- zip [0..] board]
Ist das verpönt?
Allgemeiner: In Python sprechen wir über etwas, das "Pythonic" ist, wenn es gut geschrieben und idiomatisch ist. Gibt es hier einen ähnlichen Begriff für ein "Haskellion" -Konstrukt? –