为什么我的输出是“()”,我该如何解决?

问题描述 投票:0回答:1

我确实可以处理来自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')
file haskell output
1个回答
-1
投票

main2 :: IO ()更改为main2 :: [Char]。哦,mapM_mapM

我看不到其他东西,所以应该解决它。

© www.soinside.com 2019 - 2024. All rights reserved.