如何将这部分C代码转换成Haskell?据我所知,我必须使用国家蒙纳德,但我不知道如何使用。
int x = 1;
int y = 2;
x = x * y;
y = y + x;
最佳答案
直译将使用IORefs:
import Data.IORef
main :: IO ()
main = do x <- newIORef 1
y <- newIORef 2
y_val <- readIORef y
modifyIORef x (\v -> v * y_val)
x_val <- readIORef x
modifyIORef y (\v -> v + x_val)
正如您所看到的,Haskell中的命令式编程很难看这是有意的,以诱使你使用功能风格不过,您可以定义一些助手函数,使其更易于接受:
import Data.IORef
-- x := f x y
combineToR :: (a -> t -> a) -> IORef a -> IORef t -> IO ()
combineToR f x y = do y_val <- readIORef y
modifyIORef x (\v -> f v y_val)
addTo :: Num a => IORef a -> IORef a -> IO ()
addTo = combineToR (+)
multWith :: Num a => IORef a -> IORef a -> IO ()
multWith = combineToR (*)
main :: IO ()
main = do x <- newIORef 1
y <- newIORef 2
multWith x y
addTo y x