5

ビジュアル プロローグには、タイプを定義できるプロローグ プログラムの「ドメイン」セクションがあります。swi-prolog に似たようなものはありますか?

ビジュアル プロローグでは、型は次のように定義されます。

domains
NewType = thing1; thing2
4

3 に答える 3

7

いいえ。ただし、Mercuryにはモード宣言があります。マーキュリーはプロローグ以上のものです。それは機能論理言語です。Mercuryにはまだ多くのProlog構文があります。

SWI-Prologは標準のPrologです。ドキュメント1のモード宣言のみをユーザー向けの情報として使用します。このような宣言は、コンパイルするドキュメント解析プログラムのモジュールのコメントに配置できます。

標準のプロローグでは、コメント以外では、そのような宣言は非常に特殊な状況でのみ許可(および要求)されます。たとえば、SicstusPrologのブロック/1述語はそれらを必要とします。

ブロック/1は、協調ルーティング(遅延評価、遅延など)に使用されます。block私の人生で1つのプログラム、PAKCS 2、別の関数型論理言語のインタープリターでのみ使用されているのを見たことがあります。インタプリタがSWIに移植されたとき、block/1使用されませんでした。

1SWI ソースドキュメントのタイプとモードの宣言
2述語を使用するプログラムであるblock/1PAKCS(PAKCSはカレー言語の実装です)。

于 2010-10-21T23:30:17.287 に答える
7

SWI-Prolog は、あなたが求めているような容量の型をサポートしていませんが、record/1述語を介して用語指定を使用することで、単純な「型」メカニズムを実際にサポートしていることに注意してください。record図書館。

この述語を使用すると、特定の用語仕様言語を使用してかなり複雑な用語「タイプ」(パターン) を指定でき、それを解釈して、作成 (コンストラクター述語を介して)、「セッター」述語を介した変更、およびアクセサーを介した変更を実行するために使用される述語を自動的に生成します「getter」は、特定の述語の命名規則を使用した用語拡張による、用語インスタンスの述語です。

これは、Prolog に通常 (ネイティブに) 欠けている初歩的な型チェック機能を提供するため、かなり複雑な用語構造を渡す Prolog コードを作成する場合に特に役立ちます。私はこれを、実装前にインターフェースを設計する大規模な Prolog プロジェクトの多くで使用してきました。

于 2010-12-07T09:27:37.267 に答える
2

Swi & Yap プロローグの型について読んだことを思い出しました。「Prolog の Hindley-Milner 型チェッカー」を含む Web サイトは次のとおりです。

Prolog の型 - Mercury スタイルの型宣言と述語シグネチャ

Prolog Type Checker ライブラリ

于 2012-06-06T07:45:57.960 に答える