単なる興味からですが、関数型言語をひとつ習得してみようと思っています。
あなたがお勧めと思う言語とお勧めの理由、参考書 or URLを教えてください。
ポイントは、以下の3つ。
- 趣味でやるので実用性は重要視しない(実用できるに越したことはないが)
- 関数型言語のエッセンスを学べる(定義は回答者にお任せします)
- 日本語文献(出来れば書籍)が充実している
今のところ候補としては Common Lisp/Emacs Lisp, Haskell, Gauche あたりがどうか?と考えています。
Common Lisp以外にあり得ません。
http://www.aoky.net/articles/leon_bambrick/lisp_truth.htm
特にマクロが使えないLispなどプリプロセッサの無いC言語です。
そういう意味でHaskellもSchemeもお上品すぎますし、
Emacs LispはあまりにもEmacsの為の言語に成り下ってる下僕です。
ポール・グレアムの信者ならArkでもいいと思うし、
実用性を求めるならばPostScriptは抑えておきたいところですが
# 世界で一番大量に作成されるプログラムはPostScriptだと思う
関数型のプログラム言語を一つだけしか選べないとしたらCommon Lispです。
日本語文献としてはやはりポール グレアム著の
「ANSI Common Lisp」基本的な文法習得用
「On Lisp」マクロで悟りの世界を開きたい用
http://user.ecc.u-tokyo.ac.jp/~tt076524/onlispjhtml/
あたりがよいと思う。
この部分の詳細が知りたいです。
そういう意味でHaskellもSchemeもお上品すぎますし、
上品だと何がデメリットか?あたりを詳しく。
Standard MLはどうでしょうか。アメリカのスタンフォード大学やカーネギーメロン大学などの情報工学が有名な大学はC,C++より一番最初にStandard MLかSchemeを教えるそうです。
ただ残念なことにStandard MLの日本語の書籍はhttp://www.yfcbookshelf.com/programming%20language'sbooks8.htm#プログラミング言語ML くらいしかなさそうです。
Scheme関連であれば結構本が出ているので、最初にやるのであればSchemeがいいかもしれません。あの括弧に苦手意識がなければですが・・・
Standard ML も初耳ですね。ちょっと調べた限りではやはり情報が少なそうな…。
Scheme は候補には挙がりそうです。
関数型プログラミングの本としては、
をお勧めします。
扱っている言語は、Mirandaライクなのですが、実際に入手できることを考えると、Haskell で代用するしかないでしょう。Haskell本(日本で出版されたもの)は2冊しかなさそうなので、Amazonの書評でも見て決めてください。
Lispで言っている「関数プログラミング」と、Haskell の関数プログラミングはまったく別のものです。代数学的センスが要求されます。
Lispで言っている「関数プログラミング」と、Haskell の関数プログラミングはまったく別のものです。
どう違うのか詳しく。
ちなみに代数は得意なので問題なしです。
端的には Haskellだとおもいます。副作用のない純粋関数型言語としてつかえるのは。
他の言語 (ML、Lisp、Schemeなど)は、副作用を許しているので、命令的にかけるという逃げがあります。
どの程度、逃げずにかける(=書く習慣がある)かというと、
Haskell >>>(越えられない壁) >>> ML > Scheme > Lisp (Common、Emacsともに)
ぐらいでしょうか。これはプログラミングスタイルとかの問題でもありますが。
Emacs Lispだと、単にカッコつけた命令型になりかねません。
関数型という視点からみると以上ですが、Lispにはマクロなど、それはそれですごい特徴もあるので学ぶ価値はあるでしょう。
初めて知りました。LISP 由来の言語なんですね。
ただ、そうなると Common Lisp と比べて選択するメリットがいまいち感じられないのですが…。
言語自体も情報元も古いもののようですし。