LispはF#とどのように関連しており、LispをF#までの有用な足として学習していますか?

StackOverflow https://stackoverflow.com/questions/1033552

質問

これは状況です。私はほとんどC#をプログラムしており、その中に型を書きました。同時に、関数型プログラミングを学びたいです。もちろん、明らかな答えはF#です。

しかし、C#以外のすべての場合、私はemacsをエディターとして使用しており、Lispについても学びたいと思っています。 (あなたの知っているエディタ/ IDEの言語を学んでください。それでVSマクロを書くために少しVBを知っているのです)そしてそれは単なるemacsではなく、Lispは私が本当に学びたいものです。

F#については、相互運用性の問題なくC#と混ぜることができ、優れたGUI(WPF)と他の多くの.NETの利点があります。しかし、もちろん、Lispほど成熟していません。

現実的であれば、関数型言語を自分の職業生活に密輸したいかどうかはわかっています。それはF#でなければなりません。 2つの言語全体を学習することは少し多いように思えるので、関数型プログラミングを学習するにはLispが素晴らしい方法であり、後でF#を始めれば非常に簡単になることを望んでいました。...

これは本当ですか?または、2つの言語はまったく比較できませんか?

役に立ちましたか?

解決

Lispは、言語と実装の大きなファミリです。たとえば、Schemeは、おそらく100を超える実装(約10の軽度の実装)を持つLisp方言です。 Common Lispは、現在維持されている実装が約10個ある別の方言です。 SchemeとCommon Lispは両方とも、実装が実装しようとする標準を書いています。

F#は言語と実装の両方です。 Microsoftから。ほとんどはOCAMLから派生したもので、ML言語のファミリーに属します。

Lispは、関数型プログラミングをサポートする非常に初期の言語でした(60年代のLisp 1.5)。関数型プログラミングの初期の実験の多くはLispで行われました。 Lispコミュニティの70年代には、関数型プログラミングのルーツへの動きがあり、結果は Scheme でした。その後、特に前世紀の80年代と90年代に、通常のLisp方言とはまったく異なる/とはまったく異なる新しい関数型言語(ML、ミランダ、FP、SML、Haskell、Cleanなど)が登場しました。まだいくつかの遺産がありますが、それらは主に異なる方向で開発されました(静的型付け、型推論、モジュールシステム、バッチ言語、代数データ型、遅延評価、純度など)。 Schemeコミュニティには、FPコミュニティとの多くの連絡先がまだあります。しかし、それはほとんどそれです。

特定のFP言語から独立して学習できる基本的なFPのアイデアがありますが、一般的にF#はほとんどのLisp方言とは大きく異なります。 F#が.netエコシステムをサポートする他の機能(特にMicrosoftが作成したものであるため)は、Lisp方言ではあまりサポートされていません。

また、F#を学習するためにEmacs Lispのような制限されたLisp方言を知っていても、それほどの利益は期待できません。

他のヒント

Common LispとF#のどちらを使って学習したかについては、「オーバーラップ」はほんの少ししかないと思います。共通点は大まかに考えます

  • 一般的な基本データ型として 'cons-lists'を使用したプログラミング。時にはループではなく再帰的(特に末尾再帰)関数を記述します
  • 一般的な高階関数の基本的な使用例(例: 'map'-リスト内のすべての値に関数を適用する)

非常にコアな機能プログラミングのもののいくつかは別として、Common LispとF#は、2つの主流の「機能的」(非Haskell)言語ができる限り離れていると思います。 Common Lispは動的です。 F#は静的に型指定されています。構文形式はまったく異なります。ランタイムはまったく異なります。ライブラリは非常に異なります。オブジェクトシステムはまったく異なります。

どの順序で学習したとしても、一方を学習した後でも、もう一方を学習する必要があるのではないかと思います(上記で説明した小さな重複に注意してください)。

F#は、SMLやCAMLなどのML言語ファミリに最も匹敵します。構文と機能はLispとは異なります。

しかし、少なくとも1つの関数型言語を学ぶことは、コンピューターサイエンスの観点から本当に重要だと思います。そのように考えることができるのは良いことです。

そして、私は、F#を開始する前に、より純粋に機能的な言語を学習することは、優れた関数型プログラミングの習慣を身に付ける方法だと思います。そこから来ているからです。

私の見解では、関数型プログラミングを学習するには2つのアプローチがあります:

  1. より純粋な関数型言語を使用する LispやHaskellのように強制します 手続きから抜け出す すぐに考え方;または

  2. 実用的な関数型言語を使用する より多くを提供するF#など 親しみやすいが、機能性は低い 簡単に構築できるように構築します。

どちらの場合でも、言語で何か役に立つことができれば、学習体験をさらに活用できます。 Lisp(Emacs)とF#(.NET interop)の動機付けがあるように思えるので、両方を見て、何があなたの注意を引くかを見ていきます。

最終的に、関数型プログラミングの概念(高階関数、副作用なし、末尾再帰など)を理解することには、どの言語よりも価値があります。そして、これらの概念を学習すれば、新しい言語を選択し、他の言語(より機能的なC#など)でこの手法を適用するのがはるかに簡単になります。これらの行に沿って、現実世界の関数型プログラミングに興味があるかもしれません。

考慮すべき2つの重要な事項は次のとおりです。

  • LISPは動的に型付けされますが、F#は静的に型付けされます。
  • LISPにはマクロが組み込まれていますが、F#には組み込まれていません。

機能的であると見なされ、多くの共通の機能を共有していますが、それらも異なります。 LISPを学ぶことは確かにあなたをより良いF#プログラマーにし、逆もまた同じです。

.NETと相互運用できるようにするために、私は確かにF#を選択しますが、プログラミングの美しさのために、LISPも試してみます。

どちらも関数型言語ですが、構文的には非常に異なります。つまり、多くの概念は類似しており、あなたは(手続き型開発者として)どちらかを使用するために同じ心を曲げる必要がありますが、それらは非常に異なる言語です。

F#は、 ML の派生物です(すべての Lisp はより古く、 「純粋」であること関数型言語。

関数型言語の純粋さは魅力的なトピックです。言語の純度、汚れた機能、きれいな機能:概念をよりよく理解します:

  

多くの人が「純粋」について語っています。   「純粋」な関数型言語   は「良い」の同義語のようです。   一般的に2つの特徴があります   の定義に関連付けられている   純粋な関数型言語:

     
      
  1. 関数には副作用がありません
  2.   
  3. 任意の引数で呼び出された関数は常に同じを返します   値。
  4.   

私はF#が初めてですが、F#の前にLispを勉強し、.NETフレームワークとプログラミング言語の範囲内でF#をコンテキスト化するのに非常に役立つと信じています。

少なくとも最初のいくつかのビデオをここで見ることを心からお勧めします:

http://groups.csail.mit。 edu / mac / classes / 6.001 / abelson-sussman-lectures /

これらは、最初の1時間以内にLispの基本を教えます。シリーズはその知識に基づいており、そこから抜け出す刺激的な原則を定めています。

F#とSchemeのセマンティクスは、厳密な型指定の例外を除いて非常に似ています。

また、Schemeは学習するためではなく、とても小さいです!

プログラミング言語Lispはそれ自体が非常に特殊ですが、関数型プログラミングをサポートすることを除いて、F#とはまったく異なります。 LispからF#に持ち越される言語構造は多くありません。 Lispを学びたいなら、それを手に入れてください。関数型プログラミングの考え方は、構文ではなくそのまま継承されます。 Lispは本当に古く、50年代後半です。多くの言語がその影響を受けており、かなりの数の方言があります。

F#の前に学習する純粋な関数型言語を探しているなら、Haskellをお勧めします。 HaskellはMLの影響を強く受けており、F#はMLの派生物であるため、F#への優れた移行言語です。 Haskellコードを見て、F#コードで同様のパターンを確認できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top