破壊的代入

このページは最後に更新されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

last mod. 2008-04-07 (月) 15:56:55

関数型言語の比較

OCaml

参照型の変数を用いることで破壊的代入ができます。

# let x = ref 0;;
val x : int ref = {contents = 0}
# x := !x + 1;;
- : unit = ()
# !x;;
- : int = 1

標準ライブラリの一部(ストリームやハッシュテーブルなど)は、破壊的代入を用いています。

SML

OCamlと同様に、参照型を用いることで破壊的代入ができます。

- 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

新規 編集 添付