12

私は最近、関数型プログラミングについて研究し、遊んでいます。これは、プログラミングについての考え方を広げるためだけに行っています。なぜなら、「関数型」で考えるのは難しいと思うからです。

Glasgow Haskell をダウンロードして、それを試してみました。

私が疑問に思っているのは、Windows で FP を試すのに最適なプラットフォームは何ですか? 私は JVM ベースのアプローチを好みますが、SO に関する別の投稿では、末尾再帰がサポートされていないため、実際の FP 言語を JVM に実装できないことが示されています。何て言う?

編集:私が言ったように、私はHaskellでかなり実験しました。私がScala Webサイトを見直してきた回答の1つのアドバイスについて。Scala の例を見ると、コードはより「なじみ深い」ように見えます (私の背景は C と Java です)。Scala の大きな利点は、Java と並行して使用できる別の言語ツールを提供してくれることです。これは、単なる学習課題とは対照的に、現在の私の専門的な矢筒のもう 1 つの矢になる可能性があります。Scala にさらに取り掛かると、機能的な側面がより優勢になるのでしょうか、それとも機能的な影響を伴う OO コードを書くだけになる傾向があるのでしょうか? 言い換えれば、Haskell は Scala よりも速く、私の先入観に挑戦するでしょうか?

4

9 に答える 9

12

F#を確認してください。CLR には .tail 命令があるため、StackOverflow (Web サイトではなく例外) を引き起こさない末尾呼び出しを含む F# コードを記述できます。 これは、 PDCによる F# の紹介ビデオです。

于 2008-11-01T23:51:32.380 に答える
11

関数型の考え方を本当に学びたいなら、Haskell は間違いなく正しい選択です。他のほぼすべての言語では、あまりにも簡単に命令型スタイルに陥ってしまいます。Haskell は、機能的な考え方を強制します。これは学ぶ上で欠かせないものだと思いました。(もちろん、あなたは確かに私よりも規律正しいかもしれませんが、なぜあなたの運を押し上げるのですか?)

Haskell から学んだこと (かなりの量になります!) に満足したら、Clojure や Scala などのよりリベラルな関数型言語を評価する準備が整ったことになります。または、ライブラリの状況が実際にはそれほど悪くない Haskell を使用することもできます。その時点で、それは状況と個人的な好みの問題です. しかし、そのような選択をするためには、まず「純粋な」機能的な方法で考える方法を学んだことが重要だと思います.

于 2008-11-02T09:48:05.827 に答える
7

PLT スキームSICPをお勧めします。言語は非常にシンプルなので、重要な概念をすぐに理解できます。

于 2008-11-01T23:48:42.523 に答える
6

Scala が Haskell のように頭を悩ませることは決してありません。FP を学習する際に Haskell よりも Scala を選択する主な理由は、モナド、ファンクター、および高次の良さの危険な世界をより穏やかに紹介するためです。オブジェクト指向のバックグラウンドを持ち、その知識を機能的な分野に移行しようとしている場合、Scala は最適です。真っ先にディープエンドに飛び込みたい場合は、それほど素晴らしいことではありません。

あなたが求めていることを考えると、GHC Haskellをお勧めします。これほど頭が混乱することはありません。:-) とはいえ、Scala には引き続き注意を払う必要があると思います。言語には明確にユニークな側面がたくさんあります。特にその型システム (構造 + 名目上のサブタイピング == 甘い) です。Haskellほど頭を悩ませることはありませんが、他では見られないいくつかの概念、特にいわゆる「タイプフルプログラミング」方法論についての洞察を得ることができます.

ああ、あなたの質問の 2 番目の部分 (Scala での FP と OO) に答えるために、私はオブジェクト指向フレームワーク内で関数型のスタイルでコードを書く傾向があります。説明するのは少し難しいですが、それがその方法です。オブジェクト指向の観点から API を設計するが、すべてを機能的なスタイルで実装するようなものだと考えてください。私は物事を不変に保ち、高次のメソッドを使用することに多くの時間を費やしますが、継承と従来の名目上のサブタイピングの範囲内ですべてを行います。時々、私はまだ命令的なことを書きますが、それは機能的なスタイルを使用するよりもそうする方がクリーンな場合に限られます.

于 2008-11-02T19:26:59.480 に答える
5

Clojureも見てください。

于 2008-11-02T01:44:20.560 に答える
5

言い換えれば、Haskell は Scala よりも速く、私の先入観に挑戦するでしょうか?

はい。

本当に学びたいのなら、自分のコンフォートゾーンから遠く離れてください。

いずれにせよ、今後 3 か月以内に製品コードに Scala を本当に使用する予定ですか?

于 2008-11-02T18:25:46.437 に答える
3

Scalaを見てください。JVM を対象とし、Java と相互運用し、多くの最先端の関数型プログラミング機能を備えています。

于 2008-11-01T23:46:32.513 に答える
3

Haskell と GHC を使うのが大好きです。GHC には対話型インタープリター (GHCI) が含まれており、非常に役立つエラー メッセージが表示されます。さらに、Haskell は真に機能的な言語の最良の例の 1 つであり、少し試してみれば、それほど悪くはありません。さらに、素晴らしい型システムがあります。

于 2008-11-02T00:01:00.893 に答える
0

プロローグを試したことがありますか?...それは

?- bend(your_mind).
Yes


?- bend(X).
X = your_mind

とにかく、それは私にまったく新しい視点を与えてくれました... そこにはたくさんの 情報 あります

于 2008-11-02T00:45:41.800 に答える