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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Haskell

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

LISP

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

OCaml

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

Clojure

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

Q&A

5回答

10453閲覧

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

mars

総合スコア12

Haskell

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

LISP

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

OCaml

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

Clojure

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

0グッド

3クリップ

投稿2015/05/19 10:09

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

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

宗教や哲学はわすれて、

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

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

投稿2015/06/02 04:49

junjihashimoto

総合スコア36

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

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

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

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

投稿2016/02/08 08:02

編集2016/02/08 08:52
tatsuya6502

総合スコア2035

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

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

投稿2016/02/08 06:33

ShingoOgaki

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2015/08/10 15:13

編集2015/08/10 15:19
yonarogue

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2015/05/19 10:41

ozwk

総合スコア13512

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問