関数型プログラミング言語Haskell Part8
at TECH
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
150:デフォルトの名無しさん 07/11/15 03:01:07 IORefについて質問です。 do ioref <- newIORef 0 modifyIORef ioref (+1) readIORef ioref >>= print という式の中でmodifyIORef ioref (+1)がiorefの値を変更している仕組みが どうしてもわかりません。予想としては ・modifyIORefを使うと引数の値を変更できると言語の根っこの部分で決められている という事かなと思っているんですが、この考えでいいんでしょうか? 151:デフォルトの名無しさん 07/11/15 07:23:12 >>150 C言語の例でよければ *ioref=*ioref+1; で変更されるのは*iorefであってiorefではない。 Perlなら $$ioref=$$ioref+1; といった具合で。 Cで詳細に書いてみる。 void modifyIORef(int * ioref,int (*fn)(int)){ *ioref=fn(*ioref); } int add1(int arg){ return arg+1; } int readIORef(int * ioref){ return *ioref; } int main(){ int * ioref; ioref=newIORef(0); modifyIORef(&add1); printf("%d\n",readIORef(ioref)); return 0; } まあ(>>=)の部分(doで省略される部分とか)までより近く書くともっと長くなりますが。 それ以前にかけるかどうかちょっと自信ないけど。 *iorefは変更されてもiorefは1回の初期化時の変更のみということで。
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
5218日前に更新/201 KB
担当:undef