12

Hindley-Milnerは、多くのよく知られている関数型プログラミング言語の型システムの基礎となる型システムです。Damas-Milnerは、Hindley-Milner型システムの型を推測(推測?)するアルゴリズムです。

ウィキペディアは、私が知る限り、「統一」という一言に相当するアルゴリズムの説明を提供しています。それだけですか?もしそうなら、それは興味深い部分が型推論システムではなく型システム自体であることを意味します。

Damas-Milnerが統一以上のものである場合は、簡単な例と、理想的にはいくつかのコードを含むDamas-Milnerの説明が必要です。

また、このアルゴリズムは型推論を行うとよく言われます。それは本当に推論システムですか?タイプを推測するだけだと思いました。

関連する質問:

4

2 に答える 2

12

ダマス・ミルナーは、統一の構造化された使用にすぎません。

ラムダ式に再帰すると、新しい変数名が作成されます。サブタームで、特定の型を必要とする方法で使用されている変数を見つけると、その変数とその型の統合が記録されます。意味のない 2 つの型を統合しようとすると、たとえば、個々の変数が Int であり、a -> b からの関数であると言うような場合、何か悪いことをしたと怒鳴られます。

また、このアルゴリズムは型推論を行うとよく言われます。それは本当に推論システムですか?タイプを推測しているだけだと思いました。

型を推測することは型推論です。型注釈が特定の用語に対して有効であることを確認することは、型チェックです。それらは異なる問題です。

もしそうなら、それは興味深い部分が型推論システムではなく型システムそのものであることを意味します。

Hindley-Milner 型のシステムはカスプでバランスが取れていると一般的に言われています。さらに多くの機能を追加すると、型を推測できなくなります。そのため、推論プロパティを破壊することなく Hindley-Milner スタイルの型システムの上に重ねることができる型システム拡張は、現代の関数型言語の本当に興味深い部分です。場合によっては、型推論と型チェックを組み合わせます。たとえば、Haskell では、多くの最新の拡張機能は推論できませんが、チェックできるため、多相再帰などの高度な機能には型注釈が必要です。

于 2009-07-10T17:19:48.093 に答える
1

ウィキペディアには、アルゴリズムの説明が記載されていますが、これは、私が知る限り、「統合」という 1 つの単語に相当します。それだけですか?もしそうなら、それは興味深い部分が型推論システムではなく型システムそのものであることを意味します。

ダマス・ミルナー型推論アルゴリズム W の興味深い部分である IIRC は、可能な限り最も一般的な型を推論することです。

于 2010-05-07T20:24:36.867 に答える