In Visual Prolog gibt es "Domänen" Abschnitt in einem Prolog-Programm, in dem Sie Typen definieren können. Gibt es ähnliches in Swi-Prolog?Prolog Typ Definition in Swi-Prolog
domains
NewType = thing1; thing2
In Visual Prolog gibt es "Domänen" Abschnitt in einem Prolog-Programm, in dem Sie Typen definieren können. Gibt es ähnliches in Swi-Prolog?Prolog Typ Definition in Swi-Prolog
domains
NewType = thing1; thing2
Nein, aber es gibt Modus Erklärung in Mercury:
In Visual Prolog ist ein Typ wie definiert. Quecksilber ist mehr als Prolog; es ist eine functional-logic Sprache. Mercury hat immer noch eine Menge Prolog-Syntax.
SWI-Prolog ist ein Standard Prolog. Es verwendet nur Modusdeklarationen in der Dokumentation 1 als Information für die Benutzer. Solche Deklarationen können in Kommentaren von Modulen für das Dokumentieren von zu kompilierenden Programmen eingegeben werden.
In Standard-Prologs sind solche Deklarationen außerhalb von Kommentaren nur in besonderen Situationen erlaubt (und erforderlich). Das Prädikat block/1 von Sicstus Prolog benötigt sie zum Beispiel.
Block/1 wird für Co-Routing (faule Auswertung, Verzögerung usw.) verwendet. Ich habe nur gesehen block
in einem Programm in meinem Leben verwendet, PAKCS 2, ein Interpreter für eine andere funktional-Logik-Sprache. Wenn der Interpreter nach SWI portiert wurde, wurde block/1
nicht verwendet.
1Typ und Modus Erklärungen in SWI Quelle Dokumentation
2 PAKCS, ein Programm mit dem block/1
Prädikat (PAKCS eine Implementierung der Sprache Curry ist.)
Während SWI-Prolog nicht der Fall ist Support-Typen in einer Kapazität ganz wie Sie gefragt, es ist erwähnenswert, dass es in der Tat unterstützt einen einfachen "Typ" -Mechanismus durch die Verwendung von Begriff Spezifikation über die record/1 Prädikat in der record
Bibliothek. Dieses Prädikat ermöglicht es Ihnen, einen relativ komplexen Begriff 'type' (Muster) unter Verwendung einer bestimmten Termspezifikationssprache anzugeben und interpretiert es automatisch zur Generierung von Prädikaten, die zur Erstellung verwendet werden (über ein Konstruktorprädikat), Änderung über 'Setter'. Prädikate und Zugänge über "Getter" -Prädikate auf Terminstanzen, alle durch Termexpansion mit einer bestimmten Prädikatnamenskonvention.
Dies ist besonders nützlich beim Schreiben von Prolog-Code, der relativ komplexe Termstrukturen umgeht, da es Ihnen eine rudimentäre Typprüfungsfunktion bietet, die Prolog normalerweise (nativ) fehlt. Ich habe das bei vielen großen Prolog-Projekten verwendet, bei denen Schnittstellen vor der Implementierung entworfen wurden.
Ich erinnerte mich an das Lesen über Typen für Swi & Yap Prolog. Hier ist eine Website mit einem "Hindley-Milner Type Checker für Prolog:"
Types for Prolog - Mercury-style type declarations and predicate signatures