例えば、ある集合Sの各々の要素s0、s1、s2、snに対して、一連の操作を行うとしよう。
C言語等ではこの処理を行う為にforだの要素数だの余計な概念が沢山入る。
更にはポインタだのメモリを確保だのという話になってしまう。
ただ、
”任意の集合に対して一連の処理を行いたい”
それだけなのに、世界はどうしてこんなにも醜いのか。。。
しかし神は我々を見捨てない。
神は我々に関数型言語を与えてくれた。
関数型言語は良い。”一連の操作”その一点のみに集中することが出来る。
ある集合Sに対してmap{f()}と言う処理を用いることで、集合Sをf(S)→f(s0)、f(s1)、f(s2)、f(sn)という形にすることが出来る。
この時のf()こそが我々、人類のやりたかった処理そのものなのである。
更に一歩話を進めることにしよう。
先に行った処理は任意の集合の”全て”の要素に一連の操作を行った。
次は任意の集合の”ある条件”に一致した要素に対して処理を行うことにしよう。
この処理をC言語などで書くとfor文の中にif文が入るだろう。
もうそれだけで汚い。しかもifで判断するということはbreakやcontinueなどの制御も入るだろう。
恐ろしく汚い。
更に言わせてもらおう。
愚かなる人々はifの条件の中にデータに対する操作を書いてしまうだろう。
これは要素の抽出と、その要素に対する処理が分離されておらず非常に可読性が悪い。
ソースコードを追いかけた時、自分の目線はforの間で目が回るほど上下し、
ifの中ではデータに対する処理が行われ、もはや我々が望んでいたコードの美しさは何処にも存在しない。
breakやcontinueなどが視界に入った暁には目眩がするだろう。
「プログラムは上から下に実行される」など誰が言い始めたのだろう。これほどまでに汚い世界なら僕は生きる必要性を感じない。
しかし、その言葉は関数型言語を作った人が言い始めたのだろう。
先の処理も関数型言語を使えば、もう目を回す必要はない。
filterという関数を使えばある集合Sから、部分集合Tを生成することが出来るのだ。
for文などは必要ない、filter関数を実行した次の行では”ある条件”に一致した要素のみで構成されている集合が出来ている。
その後にmapを実行すれば良いのである。
「プログラムは上から下に実行される」
それは全人類の希望への答えだ。
0 件のコメント:
コメントを投稿