優れたプログラマーになるのに役立つ、Schemeから学べるユニークな機能は何ですか?
主流の言語で多くの経験があり、視野を広げ、他の言語にはない機能面について学びたいと思っています。私はjavascriptのクロージャー、C#のラムダ式に精通しており、他の言語には欠けていることに焦点を当てることができるのかと思っていました。 LISP構文は別として、これまでに他の言語で遭遇したことがあるような気がします。
Scheme/LISPに固有で、何か新しいことを教えてくれるものはありますか?
おそらく、LISPの最も重要な定義特性は、 "Code as Data"です。他の言語ではまったく同じ方法でそのエクスペリエンスを得ることができません。 C#では、最も近いものは式ツリーです。
LISPを解析のための優れた言語にするのはその品質です。それはまた、ポールグラハムがLISPについて語る動機となった品質でもあります。セルフホスティングコンパイラは新しいものではありませんが、LISPほどエレガントな言語はありません。
メタプログラミング(LISPも優れているもの)も学ぶ価値のあることです。
ポールグラハムの平均を打ち負かす
http://www.paulgraham.com/avg.html
はい、それはあなたが再帰的に考えるのを助けます。私は1か月ほどプログラミング言語のクラスでそれを研究しただけで、プログラミングの問題をどのように考え解決するかを発展させるのに役立ちました。
他のプログラミングパラダイムを試すことは常に価値があります。次に、OO新しいアイデアでリフレッシュされた世界に戻ります。
構文ではなく、推論です。それは素晴らしい脳の運動です。再帰とリストの興味深い使用からのアパート、他に私見はあまりありませんが、それだけの価値があります。
継続 :
コンピュータサイエンスとプログラミングでは、継続とはコンピュータプログラムの制御状態の抽象的な表現です。継続はプログラム制御状態を具体化します。つまり、継続は、プロセス実行の特定のポイントでの計算プロセスを表すデータ構造です。作成されたデータ構造は、ランタイム環境に隠されるのではなく、プログラミング言語からアクセスできます。これには、プロセスの現在のスタック(寿命がプロセス内にあるすべてのデータ、たとえば「ローカル変数」を含む)などの情報と、計算におけるプロセスのポイントが含まれます。継続のインスタンスは、後で制御構造として使用できます。呼び出し時に、それが表すコントロールポイントから実行を再開します。 「現在の継続」または「計算ステップの継続」は、実行中のコードの観点から、プログラムの実行の現在のポイントから導出される継続です。
そして McCarthyの曖昧な演算子 を実装しようとします:
1963年、LISPの発明者であるJohn McCarthyは、「計算の数学的理論の基礎」という論文を発表しました。その中で彼は(Wordのコンピュータープログラムの意味で)amb(。、。)という関数を提案しました。考え方は、amb(x、y)が最初にxに等しいということです。しかし、計算の後半でこれが何らかの矛盾につながることが判明した場合、xの値は取り消され、yに置き換えられます。これは、最初に思われるよりもはるかに複雑なビジネスです。値を撤回するということは、本質的には、計算の状態全体をambが値xを返したときの状態に巻き戻し、次にyの値を挿入することを意味します。これは、xが最初に返されたときに、何らかの方法で状態全体をフリーズしてコピーすることを意味します。矛盾が見つかると、プログラムの状態全体が破棄され、再アクティブ化されたフリーズバージョンに置き換えられます。これらの凍結状態は継続と呼ばれます。多くの点で、これは酸に関するGOTOステートメントのようなものです。コードの任意の場所にジャンプする可能性があります。ただし、継続はGOTOよりも論理的な推論を受け入れやすいため、優れています。
私は次のことを考えることができます:
また、LISP言語は、ドメイン固有言語(DSL)を定義するのに素晴らしいはずです。これは、まだ知らない場合に読みたいと思うかもしれません。