- 151 名前:デフォルトの名無しさん mailto:sage [2007/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回の初期化時の変更のみということで。
|

|