相关疑难解决方法(0)

为什么我的IO没有按顺序执行?

我遇到的问题是IO没有按顺序执行,即使在do构造中也是如此.

在下面的代码中,我只是跟踪剩下的卡片,卡片是一个字符元组(一个用于套装,一个用于值)然后用户不断被问到已经播放了哪些卡片.我希望putStr在每个输入之间执行,而不是像现在这样在最后执行.

module Main where
main = doLoop cards
doLoop xs = do  putStr $ show xs
                s <- getChar
                n <- getChar
                doLoop $ remove (s,n) xs
suits = "SCDH"
vals = "A23456789JQK"
cards = [(s,n) | s <- suits, n <- vals]
type Card = (Char,Char)
remove :: Card -> [Card] -> [Card]
remove card xs = filter (/= card) xs
Run Code Online (Sandbox Code Playgroud)

io haskell buffering

5
推荐指数
3
解决办法
813
查看次数

提示消息在已编译的可执行文件中消失?

我有一个Haskell程序,它显示一个提示,然后从命令行接受输入.我这样做是:

main = do putStr "Please enter program source file name: "
          programFileName <- getLine
          programFileHandle <- openFile programFileName ReadMode
          program <- hGetContents programFileHandle
          putStr "Please enter initial file configuration file name: "
          initConfigFileName <- getLine
          initConfigFileHandle <- openFile initConfigFileName ReadMode
          initConfigStr <- hGetContents initConfigFileHandle
          print (evaluateProgram (lines program) (readReg initConfigStr))
Run Code Online (Sandbox Code Playgroud)

当我在GHCi解释器上运行它时,提示显示正常,我能够输入我的输入(以及其他所有工作).

例如*Main> main请输入程序源文件名:sum.urm请输入初始文件配置文件名:sum.conf 9

当我编译它时(在Mac OS X或Windows上),它会生成一个不显示我的提示的可执行文件.它等待两个输入字符串,然后一旦我输入了有效的文件名,它就会输出提示和结果.

例如

$ ./a.out 
sum.urm
sum.conf
Please enter program source file name: Please enter initial file configuration file name: 9
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样?

好奇的是,我在Haskell中实现了一个无限注册机器 …

haskell

0
推荐指数
1
解决办法
164
查看次数

标签 统计

haskell ×2

buffering ×1

io ×1