破壊的代入OCaml参照型の変数を用いることで破壊的代入ができます。 # let x = ref 0;;
val x : int ref = {contents = 0}
# x := !x + 1;;
- : unit = ()
# !x;;
- : int = 1
標準ライブラリの一部(ストリームやハッシュテーブルなど)は、破壊的代入を用いています。 SMLOCamlと同様に、参照型を用いることで破壊的代入ができます。 - val x = ref 0; val x = ref 0 : int ref - x := !x + 1; val it = () : unit - !x; val it = 1 : int Haskellできません。ただし、IORefモナドを用いることで似たことができます。 import IORef
import Monad
main :: IO ()
main = do x <- newIORef 0
writeIORef x 1
modifyIORef x (+1)
writeIORef x . (+1) =<< readIORef x
putStrLn.show =<< readIORef x
|