Haskell 什么';我的代码中有什么阻止IO刷新的?

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

我试着解决,下面是一些尝试性的东西

当我在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 [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
中,因此不能在纯代码中使用。