25

ほとんどのLispとSchemeが動的に型付けされるのはなぜですか?静的型付けは、それらの一般的な機能のいくつかと混ざりませんか?

4

3 に答える 3

17

入力とS式を一緒に機能させることができます。型付きスキームを参照してください。

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

型付きの衛生的マクロは難しい。

于 2010-06-01T20:50:43.333 に答える
13

Lispが1958年から1960年に発明されたとき、言語と実装の両方として多くの機能が導入されました(ガベージコレクション、セルフホスティングコンパイラなど)。一部の機能は、他の言語(リスト処理など)から(いくつかの改善を加えて)継承されました。言語は関数を使って計算を実装しました。S式は、言語機能というよりも、(当時の)実装の詳細でした。型システムは言語の一部ではありませんでした。インタラクティブな方法で言語を使用することも、初期の実装機能でした。

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

後で静的型システムで発明された関数型言語も、S式以外の構文を取得しました。マクロや関連機能のサポートは提供されていませんでした。後で、これらの言語/実装のいくつかは、構文拡張のためにプリプロセッサを使用しました。

于 2010-06-01T23:26:19.147 に答える
5

静的型付けは字句です。つまり、式を評価したり計算したりすることなく、ソースコードを読み取ることで型に関するすべての情報を推測できます。ここでは、条件が最も重要です。静的に型付けされた言語は、これが発生する可能性があるように設計されています。コンパイラーは、ソースを読み取るだけで型エラーが発生しないことを証明できるように、より適切な用語は「字句型付け」になります。

lispの場合、これは厄介な違いです。lispのソースコード自体は静的ではなく、lispはホモアイコニックであり、データをコードとして使用し、拡張して独自の実行中のソースを動的に編集できるためです。

Lispは最初の動的型付け言語であり、おそらくこの理由で、プログラムコード自体はLispではもはや語彙ではありません。

編集:はるかに強力な理由。静的型付けの場合は、リストを入力する必要があります。すべての要素を説明するリストごとに非常に複雑なタイプを設定することも、各要素が同じタイプである必要がある場合は、そのリストとして入力することもできます。前者のオプションは、リストのリストで地獄を生み出します。後者のオプションでは、ソースコードにデータごとに同じタイプのみが含まれている必要があります。つまり、リストは整数とは異なるタイプであるため、式を作成することさえできません。

ですから、私はあえてそれを実現することは完全にそして完全に実行不可能であると言います。

于 2010-06-09T02:46:19.827 に答える