質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • LISP

    55questions

    LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

  • Haskell

    54questions

    Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

  • OCaml

    8questions

    OCaml(オーキャムル)は、フランスのINRIAが開発した関数型言語MLの一種で、 最新の言語理論の成果が取り入れられているプログラミング言語です。

  • Clojure

    6questions

    Clojureは、プログラミング言語であり、LISP系の言語の方言の一つです。

Haskell,Clojure,OCamlのうち始めるのにおすすめのものはどれですか?

受付中

回答 5

投稿

  • 評価
  • クリップ 2
  • VIEW 4,778

mars

score 5

Haskell,Clojure,OCamlのうち始めるのにおすすめのものはどれですか?
純粋な関数型言語を学びたいです。
ほかにもあったらよろしくお願いします
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

+2

宗教や哲学はわすれて、

http://www.mew.org/~kazu/material/2010-func.pdf
をみると関数型の要素がつまっているのは
Haskellです。

純粋=副作用がないとすると
Haskellです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

最近よく言われている関数型プログラミングの長所(簡潔なコード、安全でバグが少ない、並列化しやすい)を学んで使いこなせるようになりたい、ということでしたら、やはり、MLの特徴を持った言語である、OCamlとHaskellをおすすめします。Clojureは、関数型パラダイムの要素も持っていますが、どちらかというと、Lispパラダイムという独自のものに属していると理解しています。

では、OCamlとHaskellのどちらから始めたらいいかというと... 難しいですね、片一方で済むくらい良書に恵まれていればいいのですが。私はどうしてるかというと、プライベートの時間で、両方同時に学んでます。(そして、仕事では強固な分散システムの開発をしているので、これらとは別に、5年ほど、Erlang/OTPを使ってます。)

日本語で関数型プログラミングの基礎を学ぶには、OCamlの方がよい書籍が揃っているように思います。ですから強いて言えば、OCamlから始めて、その後は、Haskellも並行して学ぶというのがおすすめでしょうか。

OCamlの日本語の書籍では「プログラミングの基礎」(浅井健一 著)の評価がいろいろな所で高いのですが、私は海外に住んでいるので入手できません。「プログラミング in OCaml」(五十嵐淳 著)は、電子版もあるので私も持っています。比較はできませんが、基礎から丁寧に解説されていて、良い本だと思います。

その他、関数型プログラミングの長所を解説した本でお薦めなのは、「関数プログラミング実践入門」(大川徳之 著)です。こちらは、Haskellと他の言語で書かれたプログラムを比較しながら解説されています。あと今読んでいる本で「Scala関数型デザイン&プログラミング」(Paul Chiusano、Rúnar Bjarnason著、株式会社クイープ 翻訳)もなかなかいい感じなのですが、これはある程度関数型プログラミングに慣れてからでないと、ついていくのが難しいかもしれません。

(編集:「関数型言語の長所」と書いていたところを、「関数型プログラミングの長所」に変更しました)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

関数型言語をここ数年勉強している者です。
marsさんが関数型プログラミングがどんなものなのかを純粋に知りたいけれど、
周囲に関数型言語に詳しい人がいないという前提であれば、OCamlをお勧めいたします。
OCamlは教育用にも使われている言語なので初心者でも取っつきやすいです。
ただし、コード補完やデバッグなどの高度な開発環境を整えるのに苦労するかもしれません。これといったIDEがなくテキストエディタを使うことになると思います(手近なものではocaml-top)。
その点ではHaskellの方が簡単ですが、Haskellでは関数型プログラミングの開発手法を深く学べる日本語の書籍が見当たりませんでした(すごいHaskell本はどちらかというと言語の解説に重きを置いているよう感じました)。一方、OCamlでそのあたりを学べる書籍として、浅井健一先生の「プログラミングの基礎」をお勧めいたします。
まずはOCamlを勉強して、気が向いたら他の言語もやるのが、一見遠回りに見えますが一番挫折しづらい道だと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

何から学び始めるか
関数型言語の中でも特にHaskellは、一般的に普及している手続き型言語に比べて、多くの方にとってみると使いこなせるようになるまで時間がかかる場合が多いです。
なのでLisp系で小さいコードを書きながら馴染んでいくのがいいかもしれませんが、ただ関数型言語がどのようなものであるか(関数型言語的なアプローチとはどんなものか)を簡単に知ってみたいという程度であれば、なにも関数型言語を選択せず、JavaScriptで関数型言語的なアプローチをとってみて雰囲気をつかむ程度でもいいかもしれません。

JavaScriptで学ぶ関数型プログラミング
http://www.oreilly.co.jp/books/9784873116600/

しかし上記アプローチではHaskellでプログラミングを行うことのメリットの半分も享受できないので、あくまで「関数を主体としたコード設計を用いてプログラミングを行うとどんな感じか」という雰囲気をつかむ程度の理解となります。それでもいい場合もあるかとも思いますので、Haskellを学習しようとして挫折した、あるいは挫折しかかっている、などの場合、箸休めとして上記アプローチもいいかもしれません。

何を学び続けるか
きちんと理解が進んでくると更に奥によりディープな世界が見えてくるようになるのがHaskellの良さです。そういう意味では簡単に満足せずに学び続けられるのもHaskellの良さであり、ソフトウェアやツールを作る喜びだけでなく、より高度な抽象思考を得られることによる世界の見え方の変化がもたらす喜びを得られるので、学び続けることそのもの自体を目的とする場合であれば最初からHaskellをおすすめします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

「純粋な関数型言語」というと
「関数型言語」とはなにか?それが「純粋」とはどういうことか?
という議論が始まって最終的に宗教戦争化します。

ただ単に学びたいだけならSICPなどを読んで、
いわゆる「関数的」なものとそうでないものの差異を勉強するといいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • LISP

    55questions

    LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

  • Haskell

    54questions

    Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

  • OCaml

    8questions

    OCaml(オーキャムル)は、フランスのINRIAが開発した関数型言語MLの一種で、 最新の言語理論の成果が取り入れられているプログラミング言語です。

  • Clojure

    6questions

    Clojureは、プログラミング言語であり、LISP系の言語の方言の一つです。