Haskell 什么';我的代码中有什么阻止IO刷新的?
我试着解决,下面是一些尝试性的东西 当我在ghci中使用Haskell 什么';我的代码中有什么阻止IO刷新的?,haskell,Haskell,我试着解决,下面是一些尝试性的东西 当我在ghci中使用hSetBuffering标准输出无缓冲,solveAct 1,15 10,对其进行测试时,ghci显示的结果行数较少,阻塞的时间较多,并且立即显示rest结果 如何实时查看中间结果 import Control.Monad import Data.List import Data.Maybe import System.IO readInts = fmap read . words <$> getLine :: IO [In
hSetBuffering标准输出无缓冲
,solveAct 1
,15 10
,对其进行测试时,ghci显示的结果行数较少,阻塞的时间较多,并且立即显示rest结果
如何实时查看中间结果
import Control.Monad
import Data.List
import Data.Maybe
import System.IO
readInts = fmap read . words <$> getLine :: IO [Int]
main = do
t <- readLn :: IO Int
hSetBuffering stdout NoBuffering
sequence_ $ solveAct <$> [1..t]
showTable x = intercalate "\n" $ intercalate " " . fmap show <$> x
solveAct i = do
[j, n] <- readInts
putStrLn $ "Case #" ++ show i ++ ":"
putStrLn $ showTable (take n $ solve (j-1))
digits n = [[x ^ y | y <- [1..n-1]] | x <- [2..10]]
primes = 2 : [x | x <- [3,5..], all (\y -> x `rem` y /= 0) $ takeWhile (<= intSqrt x) primes]
intSqrt = floor . sqrt . fromIntegral
getNDivisor n = listToMaybe [x | x <- takeWhile (<= intSqrt n) primes, n `rem` x == 0]
casesOfMat = subsequences . transpose . digits
casesOfJam n = fmap ([1 + x^n | x <- [2..10]]:) $ casesOfMat n
eachBaseReps n = fmap sum . transpose <$> casesOfJam n
solve :: Int -> [[Int]]
solve n = do
decimals <- eachBaseReps n
let divs = getNDivisor <$> decimals
guard $ all isJust divs
return $ last decimals : catMaybes divs
import-Control.Monad
导入数据。列表
导入数据,也许吧
导入系统.IO
readInts=fmap读取。单词getLine::IO[Int]
main=do
t您可以实时看到结果。只是的计算都是公正的。map getNDivisor
对于每个步骤14的第三个元素花费了很长时间
您可能还喜欢序列::[Maybea a]->[a]
,当其输入的所有元素都是Just
时,它会返回Just xs
。然后,您可以将您的all isJust
检查和catMaybes
操作打包为一个案例
操作。感谢您的回答和评论。你是对的,我有一个问题。如果是C代码,那么我可以在调试时使用暂停。有没有相应的工具?@jeiea ghci内置了一个调试器。这本手册对如何使用它有很好的介绍,我鼓励你去看看。关于你的确切问题,有threadDelay
,尽管它在IO
中,因此不能在纯代码中使用。