スキーム対 Lisp ? 何を学ぶべきか、関数型プログラミングの言語が必要です。
3 に答える
名前と慣習に関しては、Scheme の方が一貫性があり、対称的であるというのは客観的に正しいと思います。些細な例: true と false は #t と #f であり、Lisp のように T と nil ではありません。このような詳細は契約違反ですか? もちろん違います。しかし、早い段階で覚えておかなければならない奇妙な例外が少なければ少ないほど、重要なことから気が散らなくなります。
Scheme で再帰を使用することもできますが、再帰の匂いがしないこともできます。たとえば、常に人気のある名前付き let イディオムでは、誰もが「ループ」と名付けているようです: (let loop () .. .) -- または明示的なループ構造ですらあります。
CL と同様に、Scheme は機能的であることや不変であることを強制しません。しかし、あなたが命令的なバックグラウンドを持っているのであれば、変数に値を再割り当てすることなく、物事を書く方法を押し進めて最終的に「クリック」させることはやりがいがあります。ただし、その電球の経験が必要ない場合は、お気軽に設定してください。物事を命令的に。
Scheme から始めることをお勧めします。より具体的には、Racket (以前の "PLT Scheme") から始めることをお勧めします。素晴らしい IDE、非常に優れたドキュメント、非常に役立つメーリング リストが付属しています。実世界のプログラムを作成したり、SICP や HtDP などの優れた本を読んだりできるライブラリがあります。
SOですでにここで回答されています:LispとSchemeの比較
Vinko Vrsalovicからのベストアンサー:
過去に Lisp を使用したことがある場合は、"Lisp" とは何かについて、Common Lisp とはほとんど関係のない考えがあるかもしれません。Common Lisp は、その子孫であるほとんどの方言に取って代わりましたが、残っている Lisp 方言はこれだけではありません。また、いつどこで Lisp に触れたかによっては、これらの他の方言の 1 つを学習したことがあるかもしれません。
Common Lisp 以外で、まだアクティブなユーザー コミュニティを持っている汎用 Lisp 方言の 1 つは、Scheme です。Common Lisp は、Scheme からいくつかの重要な機能を借用しましたが、それを置き換えるつもりはありませんでした。
もともと MIT で設計され、学部のコンピュータ サイエンス コースの教育用言語としてすぐに使用されるようになりましたが、Scheme は常に Common Lisp とは異なる言語のニッチを目指してきました。特に、Scheme の設計者は、コア言語をできるだけ小さくシンプルに保つことに重点を置いてきました。これは、教育言語にとっても、言語について正式に証明できることを望むプログラミング言語研究者にとっても明らかな利点があります。
また、標準で指定されている言語全体を比較的簡単に理解できるという利点もあります。しかし、Common Lisp で標準化されている多くの便利な機能が省略されています。個々のScheme実装は実装固有の方法でこれらの機能を提供するかもしれませんが、それらが標準から省略されているため、移植可能なCommon Lispコードを書くよりも移植可能なSchemeコードを書くことが難しくなります。
また、Scheme は関数型プログラミング スタイルと再帰の使用を Common Lisp よりもはるかに強調しています。大学で Lisp を勉強して、Lisp はアカデミックな言語であり、実際には応用できないという印象を受けた場合は、Scheme を学んだ可能性があります。これは、Scheme の特に公平な特徴付けであると言っているわけではありませんが、理論的に「純粋な」言語ではなく、現実世界のエンジニアリング言語として明確に設計された Common Lisp にはさらに当てはまりません。
もしあなたがSchemeを学んだなら、SchemeとCommon Lispの間の多くの微妙な違いがあなたをつまずかせるかもしれないことにも注意すべきです. これらの違いは、Common Lisp コミュニティと Scheme コミュニティの熱狂的な人々の間で長年続いている宗教戦争の原因でもあります。より重要な相違点をいくつか指摘していきます。
まだ広く使用されている他の 2 つの Lisp 方言は、Emacs エディターの拡張言語である Elisp と、Autodesk の AutoCAD コンピュータ支援設計ツールの拡張言語である Autolisp です。Elisp と Autolisp は他の Lisp の方言よりも多くの行が書かれている可能性がありますが、どちらもホスト アプリケーションの外では使用できず、Scheme や Common Lisp に比べてどちらもかなり古風な Lisp です。これらの方言のいずれかを使用したことがある場合は、Lisp タイム マシンに飛び乗って、数十年先にジャンプする準備をしてください。
スキームをお勧めします。それはかなりシンプルで純粋に機能的です。CLは大きく、複雑で、習得が難しく、複数のパラダイムをサポートしています。関数型プログラミング専用の言語が必要な場合は、その能力のほとんどを使用しません。