Haskell 为什么这个变量超出范围?(哈斯克尔)
我会马上开始的(我删除了一堆无关的代码,以防这看起来有点滑稽——试图让它成为一个MCVE):Haskell 为什么这个变量超出范围?(哈斯克尔),haskell,syntax,scope,mutable,Haskell,Syntax,Scope,Mutable,我会马上开始的(我删除了一堆无关的代码,以防这看起来有点滑稽——试图让它成为一个MCVE): import System.IO 进口管制 导入数据.IORef main::IO() main=do hSetBuffering标准输出无缓冲 输入行您可以将x设置为一个参数 import System.IO import Control.Monad import Data.IORef main :: IO () main = do hSetBuffering stdout NoBuffer
import System.IO
进口管制
导入数据.IORef
main::IO()
main=do
hSetBuffering标准输出无缓冲
输入行您可以将x
设置为一个参数
import System.IO
import Control.Monad
import Data.IORef
main :: IO ()
main = do
hSetBuffering stdout NoBuffering
input_line <- getLine
let input = words input_line
let x0 = read (input!!0) :: Int
x <- newIORef x0
loop x
loop :: Int -> IO ()
loop x = do
input_line <- getLine
let the_dir = input_line :: String
putStrLn $ show x
loop
你能让loop
接受一个输入参数并将x
传递给它吗?我不知道怎么做,但我认为这是一种有效的方法。更重要的是,你想做什么需要IORef
之类的?我有一个游戏循环,反复运行,我需要读取输入并相应地更新值/输出,我不知道如果一切都是不变的,你该怎么做。也许您可以用上面的内容更新您的问题,并提供一些示例数据,以便我们可以看到解决此问题的另一个解决方案?这不会进行类型检查。上面,x
是一个IORef Int
,然后用作字符串。不过,只要稍微多做一点工作,它就应该可以工作了。@chi我将参数更改为IORef Int——如何让它打印出来?我试着打印$x
和打印(readIORef x)
等等,什么都没有working@user8930358试试print=@chi我必须用空格分隔符在同一行上打印其中两个,具体地说,willprint=看起来像printf“%d%d”x_out y_out
在执行x_out之后工作
import System.IO
import Control.Monad
import Data.IORef
main :: IO ()
main = do
hSetBuffering stdout NoBuffering
input_line <- getLine
let input = words input_line
let x0 = read (input!!0) :: Int
x <- newIORef x0
loop x
loop :: Int -> IO ()
loop x = do
input_line <- getLine
let the_dir = input_line :: String
putStrLn $ show x
loop
import Control.Monad
...
x <- newIORef x0
forever $ do
input_line <- getLine
let the_dir = input_line :: String
putStrLn $ show x