関数型プログラミングの実際の実装?[閉まっている]


9

私は、それぞれが非常に得意とする分野を理解するために、さまざまな種類の言語に精通しようとしています。これまでのところ、C-手続き型言語、C ++とjava-静的型付きオブジェクト指向言語、そしてgroovy-動的型付きオブジェクト指向言語について触れてきました。

すべてのプログラミング言語はおそらくニーズに答えるために始められています。そして、私はすべての言語が少なくとも1つの点で非常に優れていると思います。そのため、特定の領域または分野で標準になります。Cと同様に、C ++はブラウザーやゲーム開発などの分野で標準になっています。簡単なスクリプト機能を備えたLinuxの世界ではPython、エンタープライズの世界ではJavaなど。

今、私はClojureやLispのような関数型プログラミング言語を学びたいと思っています。では、実際のシナリオで関数型プログラミング言語はどこに使用されているのでしょうか?アプリケーションやUIの開発にClojureやLispを使用することはないと思います。では、関数型プログラミングの実装について簡単に理解するために、基本的なチュートリアルと学習リソースを確認した後、どのようなプロジェクトに没頭すべきでしょうか?また、clojureのように、特定の1つの言語を強くお勧めしますか?


5
「そして、すべての言語が少なくとも1つの点で非常に優れていると思います。そのため、特定の領域または分野で標準になります」それは一般的には正しくありません。言語が何らかの形で「特殊化」されていると考えるのは危険な前提です。一部の言語にはニッチがありますが、一般的にはそうではありません。
S.Lott、2012

6
「どうやって、どこから始めればいいのかわかりません。」チュートリアルを開始できない理由は何ですか?これらの言語のチュートリアルが役に立たない、または役に立たない理由を説明できますか?
S.Lott、2012

「C ++とJava」は、互いにほとんど関係がありません。
DeadMG

関数型プログラミングのパラダイムに従う理由から離れて、ClojureやLispを学ぶことに本当に興味を持ったことを教えてください。
Maxood、2012

3
「リアルタイム」というと、「現実の世界」という意味ですか?これは、この質問の文脈ではもう少し理にかなっているようです。
sepp2k

回答:


13

実世界の関数型プログラミングと言えば、Erlangだと思います。

Erlangは、高可用性の要件を持つ大規模にスケーラブルなソフトリアルタイムシステムを構築するために使用されるプログラミング言語です。その用途の一部は、テレコム、バンキング、eコマース、コンピュータテレフォニー、およびインスタントメッセージングです。

http://www.erlang.org/


3
+1コレクト!また、関数型土地の初心者にとって、「純粋な」関数型言語はHaskellであることも
付け加えておき

5

スタンフォード大学による関数型プログラミングに関する優れた講義シリーズがあります。それらはYouTubeで確認できます。

LISPではなくSchemeを検討することをお勧めします。SchemeはLispの修正版であり、さらに拡張されています。スキームは、主に学術目的およびトレーニング目的で使用されます。理論的なコンピュータ科学の研究をしたいなら、それは素晴らしい言語です。

アプリケーション

Android向けGoogle App Inventorは、Schemeを使用します。Kawaiを使用して、SchemeコードをAndroidデバイスで実行されているJava仮想マシンのバイトコードにコンパイルします。Elk SchemeはSynopsysがそのテクノロジーCAD(TCAD)ツールのスクリプト言語として使用しています。

FYI:スキームの使用


ワンダーこの質問はあなたを助ける可能性がある場合:programmers.stackexchange.com/questions/25056/...
Maxood

1
そして、これ(無料!とオンライン!)のLISPブックがあります:gigamonkeys.com/bookこれは、ID3タグパーサー、Webプログラミング、スパムフィルタリングなどの「実用的な」プロジェクトをカバーしています。
FrustratedWithFormsDesigner

5

mailrank.com(Facebookにより買収)の創設者であるブライアンオサリバンは、Haskellでこのソフトウェアのサーバー側全体を構築しました。彼これについてストレンジループ2011で発表しました。ビデオスライドはオンラインで入手できます。

同じ男がReal World Haskellと呼ばれる本を書いた。何人かの人々がプログラミングチュートリアルに言及しました。これはあなたの興味に非常に適しているかもしれません(私はErlangの提案も好きです)。


4

金融業界の友人から、量的取引会社のJane StreetがOCamlを使用して取引戦略を実装していることを知っています。彼らは、その理由について話し合うページと、そのテーマについての話し合いへのリンクを持っています。


2

Common Lispの成功事例のリストを次に示します。

http://wiki.alu.org/Industry%20Application

http://www.franz.com/success/

http://www.lispworks.com/success-stories/index.html

Common Lispは部分的に機能しているだけですが(OOPと手続き型、および自分で実装したいもの、またはライブラリで実装したいものもサポートしています)、非常に実用的な言語であり、有能なプログラマーの手に非常に強力です。私は実際にそれを使用して、優れたRESTASフレームワークでWebアプリを作成しています。

そして、私が現在取り組んでいる商用のpythonプロジェクトは、最終的にはlispで記述されたサービスによって補足されるでしょう(その名前が示唆するように、RESTASはRESTfulサービスに優れています)。


1

コンパイラー(汎用言語またはDSLのいずれか)に飛び込むことをお勧めします。これが、関数型プログラミングが最も優れている場所です。スペクトルの一方の側のADTやパターンマッチングから、もう一方の側のLispマクロまで、探索する興味深い多くの便利なものが存在します。


0

あなたはヒュームを見てみたいかもしれません。

ザ・ヒュームプログラミング言語のページ:

ヒューム(高次統合メタ環境)は、強く型付けされた、ほとんどが機能的な言語であり、並行して安全性が重要なシステムを開発、証明、評価するための統合ツールセットを備えています。ヒュームは、新しいレベルの抽象化と証明可能性を導入することにより、リアルタイム組み込みシステムや安全性が重要なシステムなど、リソースが限られたシステムの言語設計のフロンティアを拡大することを目指しています。

ウィキペディアヒュームのページ:

ヒュームは、スコットランドのセントアンドリュース大学ヘリオットワット大学で開発された関数ベースのプログラミング言語で、18世紀の哲学者デビッドヒュームにちなんで名付けられました。これは、リアルタイムの組み込みシステムを対象としており、非常に抽象的でありながら、時間と空間の実行コストを正確に抽出できる設計を生み出すことを目的としているため、保証された時間と空間の制約の制約の下で実行されるプログラムを作成できます。

ヒュームは、関数型プログラミングのアイデアと有限状態オートマトンのアイデアを組み合わせるのは珍しいものです。オートマトンは、通信プログラムを一連の「ボックス」に構造化するために使用されます。各ボックスは、高レベルのパターンマッチングを使用して、純粋に機能的な方法で入力を出力にマップします。また、一連のレベルとして構成されていることも珍しく、各レベルは、非常に珍しい異なるマシンプロパティを公開します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.