関数プログラミングとは??

副作用的に生じる変化ではなく、返り値を使って動作するプログラミングのこと。

例えばこんなコードは、返り値を使ったプログラミングであると言えるのでは。


ArrayList list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");


というわけで感覚的には、Lisp等での関数プログラミングは、unixのスクリプトにおいてパイプを繋いで処理を行うことに似ている(ほんとか?)

まあ途中で標準出力に表示してデバッグできたりするところも、関数単位に動作させてテストするところと似ていなくもない。とか言ってみたりして。

なるほど、でもJavaで判りやすいコードを書く、というのはそういうことかも。

判りにくいコードとは、副作用的にどういうことが起きているかを頭の中で想像することを読む人に要求するもの、ということなのかもしれない。

そこそこの経験があるプログラマほど、脳を酷使するコードを書きたがるが、その後経験を積むと、判りやすいコードを書くようになっていく気がする(とか偉そうに言ってみる)



というわけでこの本読んでます。いままでLispとか勉強しようとしては挫折しまくってきた人(自分のことですが)にお勧めです。


ANSI Common Lisp