我确实可以处理来自txt文件的文本旋转,但我最简单的方法就是将输出卡回到同一文件。在程序末尾,“()”出现在测试文件(output.txt)中。我知道我需要以某种方式重写main2
,但我不知道该怎么写。我认为副作用存在问题。那么该怎么办?我很高兴得到您的帮助
import System.IO
getPixel :: [[Char]] -> Int -> Int -> Char
getPixel img x y
| x >= 0 && x < width && y >= 0 && y < height = img !! y !! x
| otherwise = ' '
where
height = length img
width = length $ head img
rotate :: Double -> (Double, Double) -> (Double, Double)
rotate a (x, y) = (x * cos a + y * sin a, -x * sin a + y * cos a)
main :: IO ()
main = do
output <- main2
writeFile "output.txt" (show output)
main2 :: IO ()
main2 = do
image <- lines <$> readFile "input.txt"
mapM_ putStrLn $ do
y <- [0 .. 30]
return $ do
x <- [0 .. 40]
let (x', y') = rotate (pi/3) (x-5, y-1)
return $ getPixel image (floor x') (floor y')
将main2 :: IO ()
更改为main2 :: [Char]
。哦,mapM_
至mapM
。
我看不到其他东西,所以应该解决它。