関数脳まとめ
前回の続き。
まずは、これまでの話をまとめてみる。
前々回。
- 「現実物理世界」と「脳内写像世界」は(似て作られてはいるが)完全に別物。
- 我々(の意識)は、「脳内写像世界」の中でしか生きていない。「現実物理世界」には存在できる余地すら無い。
- 「現実物理世界」では純粋な物理現象しか起こっておらず、「映像」や「音」等の感覚を伴う現象は全て「脳内写像世界」の中にしか存在しない(「現実物理世界」では「光のまたたき」や「空気の振動」しか存在しない)。
- これはつまり、我々の心や、我々が住んで感じている世界は全て、写像によって構成されているという事。大雑把に言ってしまえば全ては写像関数。だから、写像関数を楽に扱える関数型言語を「やらないか」。
- ちなみに、「現実物理世界」自体も写像なのかどうかは、「現実物理世界」にアクセスする手段を五感としてしか持たない我々には、真とも偽とも証明する手段は無いと思う。
前回。
- 一般的に、オブジェクト指向言語の説明が行われる際は、現実世界の物体を例に出して説明される事が多い。
- しかし、現実世界の物体の属性の一つとして、「それが何年何月何日何時何分何秒の時の『それ』だったのか」という、時刻情報も含めた場合、とりあえず「状態」はアリとしても、「状態の変更」はほぼ不可能になってしまう(宗教的またはSF的な解釈を持ってこない限り)。つまり、全てのオブジェクトがimmutable(変更不可能)性を持ってしまう。
- 今更気付いたが、結局、前回は「現実世界に状態は無い」という事は言ってない。ただ単に、あらゆる存在のimmutable性を言っただけだった。
- オブジェクトがimmutableなら、ここに副作用は存在しない(少なくとも時刻情報を持つオブジェクトに関しては)。関数型言語の出番だ。
- ちなみに、前回のリンク元を読んでもらえば分かるが、そういう風に考えると、「時間の経過」は(世界中の全オブジェクトに対する)「時間進行関数の適用」と見る事もできる。
- この考え方を更に進める事もできる。興味のある人だけ自分でやってみましょう。
- ちなみに、前回のリンク元を読んでもらえば分かるが、そういう風に考えると、「時間の経過」は(世界中の全オブジェクトに対する)「時間進行関数の適用」と見る事もできる。
で、その辺を考えると、
- 何らかの(ワールド?)シミュレータを作るなら、関数型言語やっといて損は無い。
- 「心」や「判断力」、つまり、いわゆるAI作るなら、関数型言語やっといて損は無い。
- 履歴やキャッシュ等、属性として時間属性を持つようなオブジェクトを扱うのなら、関数型言語やっといて損は無い。
- ブラウザだって履歴を持つし、データのキャッシングは高速化の常套手段だ。しっかりしたものを作るのであれば多くの場合で、オブジェクトは時間属性を持つ必要があると思う。
- 逆に言うなら、その辺に関わらないのであれば、関数型言語は別にやらなくてもok。
という事が言える。多分。