Swi-prologのプロログタイプ定義
-
08-10-2019 - |
質問
Visual Prologには、タイプを定義できるPrologプログラムには「ドメイン」セクションがあります。 Swi-Prologに同様のことはありますか?
視覚的プロログでは、次のように定義されています。
domains
NewType = thing1; thing2
解決
いいえ。ただし、モード宣言があります 水星. 。水銀はプロログ以上のものです。それは 機能ロジック 言語。水銀にはまだ多くのプロログ構文があります。
Swi-progologは標準的なプロログです。ドキュメントでモード宣言のみを使用します1 ユーザーの情報として。このような宣言は、コンパイルするドキュメンテーションのパルシングプログラムのモジュールのコメントに配置できます。
標準的なプロログでは、コメント以外では、そのような宣言は非常に特別な状況でのみ許可されています(およびrequired)。 ブロック/1 Sicstus Prologの述語は、たとえばそれらを必要とします。
ブロック/1 共同ルーティング(怠zyな評価、遅延など)に使用されます。私は見ただけです block
私の人生の1つのプログラム、Pakcsで使用されています2, 、別の機能ロジック言語の通訳。通訳がSWIに移植されたとき、 block/1
使用されていません。
1 タイプとモードの宣言 SWIソースドキュメントで
2 PAKCS、を使用したプログラム block/1
述語(PAKCSはの実装です カレー 言語。)
他のヒント
Swi-Progologはあなたが求めているものとまったく同じように容量のタイプをサポートしていませんが、それが実際に単純な「タイプ」メカニズムをサポートしていることは注目に値します。 記録/1 の述語 record
図書館。
この述語により、特定の用語仕様言語を使用して合理的に複雑な用語「タイプ」(パターン)を指定し、作成(コンストラクター述語を介して)を実行するために使用される述語を自動的に生成するように解釈できます。 「ゲッター」は、特定の述語命名条約を備えた期間拡張のすべてによって、学期のインスタンスに述べられています。
これは、Prologが通常(ネイティブに)欠けている初歩的なタイプチェック機能を提供するため、合理的に複雑な用語構造を渡すPrologコードを作成する場合に特に便利です。これは、実装前にインターフェイスが設計されている多くの大規模なPrologプロジェクトで使用しました。
Swi&Yap Prologのタイプについて読んだことを覚えていました。これは、「PrologのHindley-Milnerタイプチェッカー」を備えたWebサイトです。