次のコードがあります。
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
を使用して while ループを使用してそれらの値を変更し、アクションが入力と最終結果からなるペアを返すようにすることです。readIORef
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
これは、階乗関数を記述しようとする私の試みです。これは明らかに機能しません。どんな助けでも大歓迎です。