我有以下代码:
while :: IO Bool -> IO () -> IO ()
while test body =
do b <- test
if b
then do {body ; while test body} -- same-line syntax for do
else return ()
我需要使用命令式编程来实现阶乘函数。我要做的是使用创建和初始化变量newIORef
,使用带有readIORef
and的 while 循环修改它们的值writeIORef
,然后让IO
操作返回由输入n
和最终结果组成的对。
这是我到目前为止所做的:
fact :: Integer -> IO (Integer, Integer)
fact n = do r <- newIORef n --initialize variable
while
(do {v <- readIORef n; n})
(do {v <- readIORef r; writeIORef (...)) --modify the value (?)
readIORef r
这是我尝试编写阶乘函数。这显然是行不通的。任何帮助,将不胜感激。