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
明日は明日の桶屋が儲かる