web-dev-qa-db-ja.com

LISPでLISPインタープリターを研究することがなぜそれほど重要なのですか?

私は多くのCSカリキュラムと、LISPで特別に書かれたLISPインタープリターを研究する意欲的なプログラマーを求める新しいプログラマーのための学習提案を見てきました。これらのサイトはすべて、「その知的な啓示」、「すべての真剣なプログラマが持つべき啓蒙体験」、「ハードウェアとソフトウェアの関係を示している」など、特に この記事この評判の良いハウツー から引用。

私の質問の一般的な感情は、LISPはどのようにして上記の目標を達成し、なぜlispなのかということです。なぜ他の言語ではないのですか?

これは、schemeでのスキームインタープリター(SICP http://mitpress.mit.edu/sicp/ から取得)の作成を終えたばかりで、pythonインタプリタをスキームで使用しており、この伝説的なエピファニーが特に前者からのものであることに苦労しています。2つの言語間のスキームインタプリタで利用できる特定の技術的な詳細を探して、その方法について理解を深めていますプログラムは機能します。

すなわち:

解釈する言語で書かれた通訳の研究がなぜ強調されているのか-元の言語と構築された言語をまっすぐに保つのは単なる精神的な練習であるのか、それとも解決策が自然の中でしか見られない特定の問題があるのか元の言語?

LISPインタープリターは、将来のソフトウェア設計のための優れたアーキテクチャー概念をどのように示しますか?

この演習をC++やJavaなどの別の言語で行った場合、何を見逃すでしょうか?

この演習で最もよく使用される要点または「メンタルツール」とは何ですか? **

**私はhaveを行ったので、自分が選択した回答を選択しましたツールと私はpythonインタープリターよりもスキームインタープリターに適しているかもしれない異なる解析方法を見つけたいと思います。

30
Ma-at

「私も」と答えるリスクがあるので、試してみるとわかります...

コンピューター言語を研究していると、構文解析については少なくとも半分だという印象を受けるでしょう。 LISPを学ぶと、表面の構文の解析は、多くのイライラする単一の括弧を好まない人(ほとんどの人と同様)にとって便利なものに過ぎないことに気付くでしょう。

それから、あなたはその便宜のために高い代償が払われたことに気づくことができました。 LISPでは、プログラムが別のプログラムを作成して実行するのは簡単です。他の言語では、ローマ数字で乗算を行うような高度な手法です。

もちろん、ほとんど誰もが「誰がそれをする必要があるのか​​」と尋ねるでしょう。まあ、それはあなたが前にあなたがすることができないことに気づくことさえなかった事の全体的なビスタを開くことを非常によく見ることができました。他の言語でもできますが、それほど簡単ではありません。

挿入されたIzkataのコメントに答える:

  • SHRDLUの自然言語理解プログラムは、英語のステートメントまたは質問をMICRO-PLANNERと呼ばれるLISP方言のプログラムに変換して実行することによって機能しました。
  • たとえば、プログラムを単純化したり、正しいことを証明したりするためにプログラムを操作するプログラムは、LISPで自然に作成されます。
  • 私はプログラムでプログラム生成を使用して、視覚的なシーンを理解しました。ビジュアルシーンでは、コードを乗算することなく、3次元オブジェクトで可能なすべての対称性を処理する必要がありました。
  • プログラムの一種である論理式を操作することで、論理と定理を証明することに関係するすべてのこと。
  • シンボリック積分や微分計算などのシンボリック数学には、ミニチュアプログラムのような数学式の操作が含まれます。
  • LISPでは、コード生成に関連するすべての問題、または「部分的な評価」というより大まかな用語が自然に発生します。私はずっと前にデータベースブリッジプログラムのためにこれを行いました。私はCでそれを行いましたが、LISPほど簡単ではありませんでしたが、LISPからアイデアを得ました。それは当時ほとんど誰もできなかったテクニック(特にCOBOLの頭)と見なされていました。多分今、私は願っています。

...それはほんの一部です...

次に、今日「モダン」と見なされているもののいくつかが、LISPで40年間古くからあることに気付きます。関数型プログラミングのように。ガベージコレクションのように。閉鎖のように。

それは、現代の言語にOOPなどの新しい良いアイデアがないと言っているわけではありません。しかし、LISPを学べば、視野が広がります。

17
Mike Dunlavey

あなたの質問に対する簡単な答えは、LISPを試すことです。できれば [〜#〜] sicp [〜#〜] と組み合わせてください。その後、あなたは悟りを開くでしょう。

それは言った...

コードはデータです
ほとんどの言語では、コードとデータを明確に区別しています。 LISPはしません。これにより、たとえばLISPでLISPパーサーを簡単に記述したり、LISP内でLISPコードを操作したりすることが可能になります。私が見つけたこの啓蒙主義の最も良い説明は LISPの性質 です。

言語の構文が非常に単純であるため、これは一部には当てはまります。構文が邪魔になるため、他の言語では実用的ではない(メタプログラミングのような)LISPでのことを可能にします。

さらに読む
平均を打ち負かす

20
Robert Harvey

なぜそれが解釈する言語で書かれた通訳の研究がそれほど強調されているのですか?

一般に、インタープリターを研究することで、その言語と機能についての洞察が得られます。一般に、プログラミング言語でコードを学習することは、リスニングとリーディングによって話し言葉を練習することに似ています。それは、その言語で何ができるか、どのように使用されるか、および一般的な「イディオム」に慣れます。より具体的には、LISPは同型言語です。つまり、式の構文はデータの構文と同じです。LISPでコードを書くと、リストを書いているように見える逆に。したがって、LISPコードをLISPコードで解釈するのは、carおよびcdrを含むリストを実行するのと同じくらい簡単です。

概念的に最大限に活用するには、このエクササイズをどのように活用すればよいですか?

インタプリタがそれ自体をどのように解釈するかを考えてください-多くのメタサーキュラインタプリタの実装(ホモニコ言語がそれ自体を解釈する場合)では、関数を単に「通過」できます。たとえば、carを実装するには、引数のcarを取るだけです。これにより、データストレージメカニズムからの重点が取り除かれ、機能に重点が置かれます。

LISPインタープリターは、将来のソフトウェア設計のための優れたアーキテクチャー概念をどのように示しますか?

インタープリターは非常に複雑になる可能性があり、それはそれらを設計する上で優れたアーキテクチャーを奨励します。それを念頭に置いて、これは個々の通訳者により依存しています。

この演習をC++やJavaなどの別の言語で行った場合、何を見逃すでしょうか?

これらの言語は同義語ではないので、メタサーキュラーLISPインタープリターの優雅さと単純さから利益を得ることができません。これは運動を難しくし、おそらくあまり一般的ではありませんが、それが実際にそれほど有益ではないとは言いません。

この演習で最もよく使用される「メンタルツール」は何ですか。

これについては良い答えがあるかわかりません。単に、インタプリタがどのように機能するかを確認するのに役立ち、さらに重要なことには、インタプリタをいじくり回して、言語への小さな変更を簡単に実装できる方法を確認するのに役立ちます。

9
TheRubberDuck

LISP自体は、非常に簡単に解析できるように構造化されています。コンパイラを書こうとすると、言語のすべてが式であり、あいまいさが少ない方がはるかに簡単であることがわかります。 LISPはあいまいさをなくすためにどこでも括弧を強制し、ステートメントはなく、式のみを持ちます。

LISPは非常に解析しやすいという事実により、ユーザーは自分のソースコードを解析し、それを使って手品を行うことができます。データとコードの境界がぼやけ、リフレクション、動的コードの書き換え、プラグイン、シリアライゼーションなど、通常かなりの労力を必要とすることを簡単に行うことができます。

それがその要点です。演習はおそらく、コードがそれ自体から簡単に解析できる場合に何ができるかについての洞察を与えることを意図しています。

5

それが誰にとっても本当に重要かどうかはわかりません。 LISPインタープリターがどのように機能するかを知らなくても、成功する開発者になることができます。コンピュータサイエンスを学ぶときは、LISPの基本的な考え方を学ぶ必要があります。

LISPインタープリターはLISPプログラマーにとって重要です。 言語の使い方を完全に理解するには、インタプリタ(およびコンパイラ1 )の仕組みを理解する必要があります。

LISPインタプリタは、学生にいくつかのことを教えるためのコンピュータサイエンスのツールとしてよく使用されます。

LISPインタープリターは短時間で学習および理解できるため、教育用デバイスとして役立ちます。 LISPについてすでに知っている学生はほとんどいないため、上記の概念を学ぶことに関しては、学生は平等な立場にいます。

4
Rainer Joswig