おはようございます。数式をブログに貼り付けれる「
Formula」というをサービスを見つけたので早速サンプル。
綺麗に表示されてますでしょうか?? 本当はWikipediaでいうところのTexのタグがほしいところだけど、まぁしょうがないか。
------
昨日Ackeyと一緒に圏論を勉強したら、関数型プログラミングの本質がだいぶわかってきました。
関数型指向では、全ての問題は集合Xから集合Yへの写像fがあるとして、
と表現できることがもっとも"扱いやすく"、美しいとされているみたいです。
その点、命令型指向では、モジュール(手続きをまとめた="抽象化した"まとまり)の記述には関数やオブジェクトを使うものの、ミクロな部分は手続きを記述することに終始します。このことが関数型と命令型の大きな違い。
特にその違いが出てくるのが、配列やリストの処理。
関数型言語では、配列やリストを「集合」であると捕え、写像する関数を使って値を処理するという風に処理します。具体的には次のような構文が使われます。
print( Array(1,2,3,4,5).map(_*2) )
// 2,4,6,8,10が表示される
命令型では、その手続きを考えて、一般には次のように処理します。
int[] a = {1,2,3,4,5};
for(int i=0; i<5; i++){
print( a[i]*2 );
}
どちらが直感的かは、見て分かることと思います。
この処理の違いは、"関数が引数としてとれる"からと見ることもできますが、そうではなくて、"計算とは、ある要素からある要素への写像で表すことができる"という見方があり、その結果として関数が引数に渡せるようになっていると考えるのがベストだと感じました。
とりま、百聞は一見に如かず。
次回から、Scalaの能力をフルに生かしたプログラムを作っていこうと思います。
PR