関数型言語のお勧めは?


単なる興味からですが、関数型言語をひとつ習得してみようと思っています。
あなたがお勧めと思う言語とお勧めの理由、参考書 or URLを教えてください。

ポイントは、以下の3つ。
- 趣味でやるので実用性は重要視しない(実用できるに越したことはないが)
- 関数型言語のエッセンスを学べる(定義は回答者にお任せします)
- 日本語文献(出来れば書籍)が充実している

今のところ候補としては Common Lisp/Emacs Lisp, Haskell, Gauche あたりがどうか?と考えています。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2008/03/21 15:55:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント20pt
お勧めする言語 LOGO
お勧めする理由 松田聖子でお馴染みのパソコン「SONY SMC-777」が標準装備していたから。
参考サイト Logo情報室 無料で利用できるWindows用LOGO処理系があります
参考書籍 マインドストーム」(シーモア・パパート/奥村貴世子/未来社/1995年03月/2,940円)
id:b-wind

初めて知りました。LISP 由来の言語なんですね。

ただ、そうなると Common Lisp と比べて選択するメリットがいまいち感じられないのですが…。

言語自体も情報元も古いもののようですし。

2008/03/14 17:35:11
id:dev_zer0 No.2

回答回数332ベストアンサー獲得回数25

ポイント20pt

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」基本的な文法習得用

ANSI Common Lisp (スタンダードテキスト)

ANSI Common Lisp (スタンダードテキスト)

  • 作者: ポール グレアム
  • 出版社/メーカー: ピアソンエデュケーション
  • メディア: 単行本

「On Lisp」マクロで悟りの世界を開きたい用

http://user.ecc.u-tokyo.ac.jp/~tt076524/onlispjhtml/

あたりがよいと思う。

id:b-wind

この部分の詳細が知りたいです。

そういう意味でHaskellもSchemeもお上品すぎますし、

上品だと何がデメリットか?あたりを詳しく。

2008/03/15 14:35:11
id:popattack No.3

回答回数214ベストアンサー獲得回数4

ポイント20pt

Standard MLはどうでしょうか。アメリカのスタンフォード大学やカーネギーメロン大学などの情報工学が有名な大学はC,C++より一番最初にStandard MLかSchemeを教えるそうです。

http://www.smlnj.org/

ただ残念なことにStandard MLの日本語の書籍はhttp://www.yfcbookshelf.com/programming%20language'sbooks8.htm#プログラミング言語ML くらいしかなさそうです。

Scheme関連であれば結構本が出ているので、最初にやるのであればSchemeがいいかもしれません。あの括弧に苦手意識がなければですが・・・

id:b-wind

Standard ML も初耳ですね。ちょっと調べた限りではやはり情報が少なそうな…。

Scheme は候補には挙がりそうです。

2008/03/15 14:42:40
id:masshie No.4

回答回数57ベストアンサー獲得回数1

ポイント20pt

関数型プログラミングの本としては、

関数プログラミング

関数プログラミング

  • 作者: R. バード P. ワドラー
  • 出版社/メーカー: 近代科学社
  • メディア: 単行本

をお勧めします。

扱っている言語は、Mirandaライクなのですが、実際に入手できることを考えると、Haskell で代用するしかないでしょう。Haskell本(日本で出版されたもの)は2冊しかなさそうなので、Amazonの書評でも見て決めてください。

Lispで言っている「関数プログラミング」と、Haskell の関数プログラミングはまったく別のものです。代数学的センスが要求されます。

id:b-wind

Lispで言っている「関数プログラミング」と、Haskell の関数プログラミングはまったく別のものです。

どう違うのか詳しく。

ちなみに代数は得意なので問題なしです。

2008/03/15 14:43:31
id:hujikojp No.5

回答回数101ベストアンサー獲得回数7

ポイント20pt

端的には Haskellだとおもいます。副作用のない純粋関数型言語としてつかえるのは。

他の言語 (ML、Lisp、Schemeなど)は、副作用を許しているので、命令的にかけるという逃げがあります。

どの程度、逃げずにかける(=書く習慣がある)かというと、

Haskell >>>(越えられない壁) >>> ML > Scheme > Lisp (Common、Emacsともに)

ぐらいでしょうか。これはプログラミングスタイルとかの問題でもありますが。

Emacs Lispだと、単にカッコつけた命令型になりかねません。

関数型という視点からみると以上ですが、Lispにはマクロなど、それはそれですごい特徴もあるので学ぶ価値はあるでしょう。

  • id:pahoo
    #1で回答した者です。
    > Common Lisp と比べて選択するメリットがいまいち感じられないのですが
    ごめんなさい。「趣味でやるので」という一文に目を奪われてしまい‥‥もちろん、Lispを習得された方が実用的です。
    LOGOは、ネットも何もない時代、教育用言語として一世を風靡しました。その残滓を感じていただければと思います。
  • id:popattack
    standard MLではこのリンクが一番情報が多いかも知れません。
    http://lang.x0.com/func/ml/sml.htm
    ここも情報が多いです。
    http://www.geocities.jp/m_hiroi/func/index.html

    ML で一番有名な機能は「型推論」でしょう。ML はプログラムから変数などのデータ型を見つけてくれるので、プログラマが型を宣言する必要はほとんどありません。推論できない場合にかぎり、ML は型宣言を要求します。この機能により、ML は静的な型チェックを行う「型付きの言語」でありながら、 Lisp のような柔軟なプログラミングが可能になっています。この他にも、パターンマッチング、多相型関数、モジュール・システムなど、ML には興味深い機能がたくさんあります。

  • id:masshie
    Haskellは、強く型付けされた(strongly typed) 非正格(non strict) 純関数型(pure functional) 言語です。Lispはtypedでなく、基本的には strict で、pureでもありません。前の方のMLとは「非正格」の部分が違います。非正格の方が無限長のデータ構造を扱えるなど、表現力が高いとされています。
    参照透明性(関数に与える引数が同じなら、結果は常に同じ =pure)から、getchar() 風の関数は存在が許されない(値がいつも同じにはならないから)ため、Haskellに導入されたI/O機構や、関数への引数は1つで事足りるようになっていること(カリー化)など、面白いことが多いと思います。
    ただ、Lispについてほとんど何も知らないなら、最初にLisp言語をやっておくのはよいことだと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません