23

私が Haskell、Erlang、Scheme を使って実験した結果、関数型プログラミング言語は科学的な疑問に答える素晴らしい方法であることがわかりました。たとえば、小さなデータ セットを取得し、それに対して広範な分析を実行して、重要な回答を返します。Project Euler の難しい問題に取り組んだり、独自の方法で Google Code Jam を試したりするのに最適です。

同時に、その性質上、実際のタスクを実際に実行するよりも、分析的な解決策を見つけることに適しているようです。Haskell では、すべてが遅延評価され、プログラム全体が、プログラムにハードコーディングするか、Haskell の限られた IO 機能を介して乱雑に追加する特定のデータに対する 1 つの巨大な分析ソリューションに要約されます。

基本的に、次のような「実用的」と呼ぶタスク

リクエストを受け入れ、リクエストされたデータを見つけて処理し、
 必要に応じてフォーマットして返します

より直接的に手続き型言語に変換されるようです。このように機能する関数型言語を見つけた中で最も幸運だったのは、Factor です。これは、Python の逆研磨表記バージョンに例えることができます。

ですから、これらの言語で何かを見逃しているのか、それともこの質問をする方法が間違っているのか、ただ興味があります. 実用的なタスクを実行するのに優れた関数型言語の例、または関数型言語によって最もよく実行される実用的なタスクを誰かが持っていますか?

4

9 に答える 9

8

言語に関して言えば、F# は主に「機能的」であると同時に「実用的」でもある言語の例だと思います。Scala と Clojure は、おそらくこのカテゴリの他のものです。

(1 レベル深く行くと、ここでの「成功の公式」は「関数型」に強く傾いている言語であると思いますが、膨大な実用的なライブラリ (.Net/JVM/いくつかの C FFI など) にアクセスでき、優れたツール (たとえばIDE サポート))

私は、質問の暗黙の前提、つまり「簡潔で美しい分析力」と「語用論」の間に緊張関係があるということに、少なくともいくぶん同意します。

于 2009-10-12T10:41:16.487 に答える
5

実用的なタスクを実行するのに優れた関数型言語の例、または関数型言語によって最もよく実行される実用的なタスクを誰かが持っていますか?

私たちのビジネスは、オンラインのクレジット カード トランザクションから Web 分析まで、すべて F# コードで実行されます。これらの LOB アプリは、.NET のシームレスな相互運用性と、Outlook や Excel などのアプリケーションの自動化を使用して、必要なすべてを迅速かつ簡単に実行する小さな F# スクリプトで構成されています。

私たちの事業は、医療機器用の組み込みソフトウェアから海事インターネット サービス プロバイダーまで、多くの分野の顧客に実際の問題を解決する F# で記述されたソフトウェアを販売することで、ほとんどの収益を上げています。

于 2010-05-12T05:08:47.807 に答える
4

おかしなことに、あなたと私は「実践的なタスク」について非常に異なる概念を持っています。あなたはそれだと言います:

リクエストを受け入れ、リクエストされたデータを見つけて処理し、必要に応じてフォーマットして返します

これは、関数型言語が作成された目的のほとんどです: データを取得し、呼び出し間の状態を保持せずに (つまり、副作用なしで) 新しいデータを返す関数です。これはここにあるもので、パイピングとも呼ばれます。

これは私が実践的な仕事と呼ぶものではありません。現代のプログラムでは、GUI、マルチスレッド機能、およびネットワーク I/O を処理する必要があります。これらはすべて、関数呼び出しの間にデータを保持するために必要な状態を持っています。データは関数にパイプされず、結果はパイプアウトされます。関数は「グローバル」状態にも影響します。

そして、機能的なプログラムが失敗し始めるのは、この「実用的なタスク」の定義です。たとえば、命令型拡張機能を使用しない場合、関数型プログラムで GUI を作成することはほとんど不可能です。

結論として、あなたが求めている答えは心からのイエスです。ただし、実際に探している答えは、それよりも少し複雑だということです。

于 2010-05-12T05:19:36.017 に答える
4

IMO、Scheme は実用的であるにはあまりにも最小限であり、教育用のいくつかのコースで使用されています (コンピュータ プログラムの構造と解釈を参照してください)。しかし、Common Lisp のような最新の Lisp 言語、特に Clojure が重要性を増しています。Erlang は、いくつかの大規模な業界で高並行性アプリケーションに使用されていますが、個人的には、エンドユーザー プログラマーが Erlang を使用しているのを見たことがありません。一方、Haskell は非常に現実的な言語であり、次のような多くの素晴らしいソフトウェアを作成するために使用されています。

  1. XMonad は、純粋に Haskell で書かれた X Window System ウィンドウ マネージャーです。
  2. Haskell 用の IDE である Leksah は、Haskell 自体で作成されています。
  3. Perl 6 の主要な実装の 1 つである Pugs は、Haskell で記述されています。
  4. 最後に、Glasgow Haskell Compiler は Haskell で書かれています。
于 2009-10-14T07:45:50.180 に答える
3

LINQ を使用したことがありますか?

もしそうなら、おめでとうございます。実用的なコンテキストで関数型言語を使用しました。機能開発とはまさにこのことです。

はい、F# は非常に便利です。

于 2010-07-06T08:50:20.720 に答える
2

Erlangは、その堅牢性と、並行性の高いサーバーを作成するための機能でよく知られています。

また、すぐに使用できるDBMSもあります。

于 2009-10-12T11:23:50.830 に答える
2

実世界での関数型プログラミング

于 2009-10-13T05:37:41.867 に答える
2

基本的に、次のような「実用的」と呼ぶタスク

リクエストを受け入れ、リクエストされたデータを見つけて処理し、必要に応じてフォーマットして返します

あなたは Erlang を使って実験しましたが、この実用的な説明の下で実用的なタスクを見つけることができませんでしたか?

リクエストを受け付けます。

あなたはのように意味しreceiveます。または、関数として直接呼び出されるだけです。

要求されたデータを検索して処理します。

ここで何を意味するのか完全にはわかりませんが、データを見つけるには、ファイル I/O、ネットワーク I/O、(分散) プロセス間通信などがあります。そのデータのサブセットを見つけるには、正規表現があります。パターンマッチングなど

処理には、文字列、リスト、数学、集合、グラフなどのものがたくさんあります。これは処理に十分ではありませんか? 他に何をお探しですか?

必要に応じてフォーマットして返します。

結果のデータをアトム、リスト、バイナリ ブロブ、フォーマットされた文字列、数値などとして返すことができます。この点で、Erlang には何が欠けていたのでしょうか? 私はここで正直に混乱しています。

于 2010-05-12T05:18:09.123 に答える
0

「実践的課題」の定義とそれが何を指しているのかよくわかりません。言い換えれば、プログラミング言語で表現する必要があるアルゴリズムによって問題を解決することについて話していると思います。もしそうなら、関数型言語は非常に便利で実用的です.特に、解決策を見つけて実装する時間が限られている場合. 私は、Google CodeJamのような複雑なアルゴリズム コンテストの解決に参加するときに、まだ非関数型言語を使用しています。この種のタスクや問題に適した関数型言語を学習する予定です。

于 2010-11-11T11:05:48.637 に答える