Я возиться с печатью случайного 2d массив Ints, в этом простом формате изображения (PPM)Печать 2d массив в Haskell
0 1 0 0 1
1 0 0 1 0
0 1 1 0 0
0 1 1 1 0
0 0 0 1 0
Ниже мой код, который работает, но кажется, что путь слишком много кода для такой простой операции. Есть лучший способ сделать это?
import System.Random
import Data.Array.IArray
main = do
g <- newStdGen
let img = listArray ((0,0),(5,5)) (myRands g) :: Array (Int,Int) Int
putStrLn $ printArray img
myRands :: RandomGen g => g -> [Int]
myRands g = randomRs (0,1) g
make2dRange :: Int -> Int -> Int -> Int -> [(Int,Int)]
make2dRange x1 y1 x2 y2 = range ((x1,y1),(x2,y2))
printArray :: (Array (Int,Int) Int) -> String
printArray arr = unlines rows
where rows = map (unwords . map (show . (!) arr)) rowIndices
rowIndices = map (\y -> make2dRange 0 y 5 y) [0..5]
Кроме очевидного, конечно (размеры массива являются жёстко, например)
Вы делаете какие-либо другие вещи с 2D-массив, так что вам действительно нужно использовать 'Array', или было бы приемлемым решение с использованием только списков? – bennofs