質問

どのようにして、ほとんどのLISPとスキームが動的にタイプされているのですか?静的タイピングは、それらの一般的な機能のいくつかと混ざりませんか?

役に立ちましたか?

解決

タイピングとS-発言を一緒に動作させることができます、 タイプ化されたスキーム.

部分的には、S-Expression言語が動的に型付けされていることは歴史的な偶然です。これらの言語は、より大きく依存する傾向があります マクロ, 、およびS-Expressionsでの解析とパターンマッチングの容易さにより、マクロ処理がはるかに容易になります。洗練されたマクロに関するほとんどの研究は、S-Expression言語で行われます。

タイプされた衛生マクロ 難しいです。

他のヒント

Lispが1958年から1960年にかけて発明されたとき、言語と実装(Garbage Collection、Self-Hosting Compilerなど)として多くの機能を導入しました。いくつかの機能は、他の言語(リスト処理、...)から(いくつかの改善がある)継承されました。言語は関数を使用して計算を実装しました。 S-Expressionsは、言語機能というよりも(当時)実装の詳細でした。タイプシステムは言語の一部ではありませんでした。インタラクティブな方法で言語を使用することも、早期の実装機能でした。

機能性言語の有用なタイプシステムは、当時まだ発明されていませんでした。それでも今日まで、静的にタイプされた言語をインタラクティブな方法で使用することも比較的困難です。静的にタイプされた言語には多くの実装があり、インタラクティブなインターフェイスも提供しますが、ほとんどの場合、典型的なLISPシステムと同じレベルのサポートを提供していません。インタラクティブなLISPシステムでのプログラミングは、そのようなインタラクティブなLISPシステムのプログラム全体とデータ全体を通じてタイプの変更を伝播する必要がある場合、多くのことをその場で変更できることを意味します。一部のスキーマーは、これらのことについて異なる見解を持っていることに注意してください。 R6RSは主にバッチ言語であり、一般的にリスプの精神ではそれほど多くはありません...

静的タイプシステムで後で発明された機能的言語は、非S-Expression Syntaxも得られました - マクロや関連する機能をサポートしませんでした。その後、これらの言語/実装のいくつかは、構文拡張にプリプロセッサを使用しました。

静的タイピングは語彙です。つまり、式を評価したり、物事を計算したりせずに、タイプに関するすべての情報がソースコードを読むことから推測できることを意味します。ここでは条件が最も重要です。静的にタイプされた言語は、これが起こる可能性があるように設計されており、より良い用語は「字句的にタイプされます」と同様に、コンパイラはソースだけでタイプのエラーが発生しないことを証明できます。

LISPの場合、LISPのソースコード自体が静的ではないため、これはぎこちなく異なります。LISPはホモコニックであり、コードとしてデータを使用し、独自の実行ソースを動的に編集することができます。

LISPは最初の動的にタイプされた言語であり、おそらくこのため、プログラムコード自体はLISPではもはや語彙ではありません。

編集:はるかに強力な理由です。静的タイピングの場合、リストを入力する必要があります。すべての要素を説明する各リストに非常に複雑なタイプを持つことができます。各要素には同じタイプを持ち、それをそのリストとして入力することができます。前者のオプションは、リストのリストを備えた地獄を生成します。後者のオプションは、ソースコードに各データムに対して同じタイプのみを含むことを要求します。これは、リストとして式を構築することさえできないことを意味します。

だから私はあえて、それは完全に完全に実現することができないと言います。

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