関数プログラミング

Matzにっき(2007-04-12)

現実世界に「状態」があるのに,プログラミング言語がそれを表現できない(ということは,間接的に表現しなければならない)というのは,私の脳内モデルとプログラムの距離が遠くなって大変つらい.

『私の脳内モデルとプログラムの距離が遠くなって大変つらい.』という部分は理解できる.

『現実世界に「状態」があるのに』というのは,『私の現実世界の脳内モデルに「状態」があるのに』と同じ意味なら,これも理解できるのでこのセンテンスは理解できる.現実世界に「状態」があるわけではなく,現実世界の脳内モデルに「状態」があるのだと思います.

現実世界から副作用のない関数モデルへのマップが脳内でできる(関数脳)状態の人には関数型言語が最適なのだと思う.

これはマップができるかどうかではなくて,現実世界の脳内モデルとして関数モデルを持っているなら関数型言語が最適なんだと思う.
実際,関数プログラミングをするとき,状態のあるモデル(OOモデルとか手続きモデル)から関数モデルへマッピングをやっているわけではないんです.最初から関数モデルで考えていると思います.

問題はどうやってそれを構築するか,だれも言語化していないことだ.「習うより慣れろ」という精神論しか聞かない.それはあまりにスパルタな.

このように思われる状況は関数プログラミング陣営の失策(というよりは無策)によるものでしょう.

最初から関数プログラミングを学ぶのでなければ,プログラマの脳内の現実世界のモデルは「状態」のあるモデルとして構築されている.そのような脳内モデルを既にもっているプログラマが,関数モデル上のプログラミングを学ぼうとするときに躓くことがあるとすればその原因は,すでに手にしたモデルからのマッピングで考えようとしてしまうことだ.

まつもとさんにコメントをいただいた.ありがとうございます.

(22:30:00)

机の上に置いたペンには位置という状態があり,その状態を変化させることができる

ここで,位置を「状態」というからには,「状態」でないものも意識されているのだと考えられます.

  「状態=変化するもの(位置)」vs「状態じゃないもの=変化しないもの(ペンのidentity)」

という図式が存在するでしょう.関数型のモデルでは

  「状態=変化するもの」vs「状態じゃないもの=変化しないもの」

という図式がないので,位置という属性はあって他の属性とは区別されるけど,それは状態(として状態でないものと区別されるもの)ではありません.

(追記予定)