静的に型指定された完全なLISPバリアントは可能ですか?このようなものが存在することさえ理にかなっていますか? LISP言語の長所の1つは、その定義の単純さだと思います。静的型付けは、この基本原則を損なうでしょうか?
はい、それは非常に可能ですが、ほとんどの慣用的なLISP/Schemeコードでは、標準のHMスタイルの型システムは通常間違った選択です。静的型付けを使用する「完全LISP」(実際にはSchemeに似ています)である最近の言語については、 Typed Racket を参照してください。
自信のない私の答えは、おそらくです。たとえば、SMLのような言語を見て、それをLISPと比較すると、それぞれの機能コアはほとんど同じです。その結果、ある種の静的型付けをLISPのコア(関数アプリケーションとプリミティブ値)に適用するのに苦労することはないようです。
あなたの質問はfullと言っていますが、問題の一部はデータとしてのコードアプローチです。型は、式よりも抽象的なレベルで存在します。 LISPにはこの区別はありません-すべてが構造的に「フラット」です。ある表現E:T(ここでTはその型の表現)を考慮し、この表現を単純なol 'データであると見なす場合、Tの型は正確に何ですか?まあ、それは親切です!種類は上位の注文タイプなので、コードでそのことについて話してみましょう。
E : T :: K
あなたは私がこれでどこに行くのかを見るかもしれません。コードから型情報を分離することで、このような型の自己参照性を回避することが可能になると確信していますが、そうすると、型がフレーバーで「LISP」ではなくなります。おそらくこれには多くの方法がありますが、どれが最良の方法かは私には明らかではありません。
編集:ああ、それで少しグーグルで、私は Qi を見つけました。これは静的に入力されることを除いてLISPに非常に似ているようです。おそらく、そこで静的型付けを行うためにどこで変更を行ったかを確認するのに適した場所でしょう。