In message <199904221603.BAA03283 / hanare00.math.sci.hokudai.ac.jp> gotoken / math.sci.hokudai.ac.jp writes: > >副作用って、プログラムが「関数」とかいうもので作れる!という > >幻想(少なくともoopな言語を前にすれば)が作り出した語なんじゃないかと > >勘ぐっています。 全ての関数の引数に「現在のシステム状態」というのを加え,返り値にも加え てやれば全部関数で書けそうですが (^^; > そうだと思います。僕が最初に副作用という言葉をみたのは > LISPの教科書でなのですが(N88BASICの次がLISPだったもので)、 > LISPの文脈だと副作用という言葉は非常に的確に思えました。 関数(というか函数)だと「何かいれると何か出てくる」っていうのが「主作 用」になりますからねぇ. > Ruby でも例えば gets の結果が $_ に代入されているのも副 > 作用ということばが似合うような気がします。正規表現マッチ > とかもそうかも。 出力以外は全て副作用でしょう.うん. > ただ、副作用なしで書けるかどうかというのは書きやすさとは > 分けて考えるべき問題で、Ruby の場合は案外副作用と呼ばれ > るものを排除できるのでは無いかと直観しています。とくに > I/O などの OS とのやりとりはオブジェクトとして扱うのは理 > にかなっています。 むしろ I/O 何かの方が副作用無しで議論するのは難しそうな.「read したら ポインタが進む」という副作用無しでプログラムを書くのは面倒.「引数に読 みだし開始点,返り値に更新された読みだし開始点を加えてやる」事によりこ の部分だけは関数的にできますが. 圏論の monads モデルを適用して関数的であり,かつ状態を持ったデータを表 現できる,という事らしいですが,「圏論の monads モデル」がわからないの で何ともいえない. > ちょっと怪しいのは制御がからむ例外と代 > 入やメソッド定義などメタな操作を可能にする eval 系のメソッ > ドくらいかな。 例外は continuation でやるとしても,他は何がなんだか,ですね. ruby インタプリタを引数にすると eval は書けるかな (^^; # そこまでやれば何でも書けるわ (^^; わけわからなくなるけど. -- 柳川和久 @ 東大阪市 . 大阪府 April 23, 1999 明日は明日の桶屋が儲かる