Einleitung

Einleitung ist eine allgemeine Zweck-Logikprogrammiersprache, die mit der künstlichen Intelligenz und linguistischen Datenverarbeitung vereinigt ist.

Einleitung hat seine Wurzeln in der Logik der ersten Ordnung, einer formalen Logik, und verschieden von vielen anderen Programmiersprachen, Einleitung ist Aussage-: Die Programm-Logik wird in Bezug auf Beziehungen, vertreten als Tatsachen und Regeln ausgedrückt. Eine Berechnung wird durch das Laufen einer Abfrage über diese Beziehungen begonnen.

Die Sprache wurde zuerst von einer Gruppe um Alain Colmerauer in Marseille konzipiert, Frankreich, am Anfang der 1970er Jahre und das erste Einleitungssystem wurde 1972 von Colmerauer mit Philippe Roussel entwickelt.

Einleitung war eine der ersten Logikprogrammiersprachen, und bleibt unter dem populärsten solche Sprachen heute mit vielen freien und kommerziellen verfügbaren Durchführungen. Während am Anfang gerichtet, auf die Verarbeitung der natürlichen Sprache hat sich die Sprache seitdem weit in andere Gebiete wie Lehrsatz-Beweis, Expertensysteme, Spiele, automatisierte Antworten-Systeme, Ontologie und hoch entwickelte Regelsysteme gestreckt. Moderne Einleitungsumgebungsunterstützung, die grafische Benutzerschnittstellen, sowie administrative und vernetzte Anwendungen schafft.

Syntax und Semantik

In der Einleitung wird Programm-Logik in Bezug auf Beziehungen ausgedrückt, und eine Berechnung wird durch das Laufen einer Abfrage über diese Beziehungen begonnen. Beziehungen und Abfragen werden mit dem einzelnen Datentyp der Einleitung, dem Begriff gebaut. Beziehungen werden durch Klauseln definiert. In Anbetracht einer Abfrage versucht der Einleitungsmotor, eine Entschlossenheitswiderlegung der verneinten Abfrage zu finden. Wenn die verneinte Abfrage widerlegt werden kann, d. h. ein instantiation für alle freien Variablen wird gefunden, dass das die Vereinigung von Klauseln und dem Singleton-Satz macht, der aus der verneinten falschen Abfrage besteht, hieraus folgt dass die ursprüngliche Abfrage, mit dem gefundenen angewandten instantiation, eine logische Folge des Programms ist. Das macht Einleitung (und andere Logikprogrammiersprachen) besonders nützlich für die Datenbank, symbolische Mathematik und Sprachsyntaxanalyse-Anwendungen. Weil Einleitung unreine Prädikate erlaubt, überprüfend, dass der Wahrheitswert bestimmter spezieller Prädikate eine absichtliche Nebenwirkung, wie Druck eines Werts zum Schirm haben kann. Wegen dessen wird dem Programmierer erlaubt, einen Betrag der herkömmlichen Befehlsform-Programmierung zu verwenden, wenn das logische Paradigma ungünstig ist. Es hat eine rein logische Teilmenge, genannt "reine Einleitung", sowie mehrere Extralogical-Eigenschaften.

Datentypen

Der einzelne Datentyp der Einleitung ist der Begriff. Begriffe sind entweder Atome, Zahlen, Variablen oder zusammengesetzte Begriffe.

  • Ein Atom ist ein Mehrzweckname ohne innewohnende Bedeutung. Beispiele von Atomen schließen ein, und.
  • Zahlen können Hin- und Herbewegungen oder ganze Zahlen sein.
  • Variablen werden durch eine Schnur angezeigt, die aus Briefen, Zahlen besteht, und unterstreichen Charaktere, und mit einem Großbuchstaben beginnend, oder unterstreichen. Variablen ähneln nah Variablen in der Logik darin sie sind Platzhalter für willkürliche Begriffe.
  • Ein zusammengesetzter Begriff wird aus einem Atom genannt einen "functor" und mehrere "Argumente" zusammengesetzt, die wieder Begriffe sind. Zusammengesetzte Begriffe werden normalerweise als ein von einer Komma-getrennten Liste von Argument-Begriffen gefolgter functor geschrieben, die in Parenthesen enthalten wird. Die Zahl von Argumenten wird den arity des Begriffes genannt. Ein Atom kann als ein zusammengesetzter Begriff mit der arity Null betrachtet werden. Beispiele von zusammengesetzten Begriffen sind und.

Spezielle Fälle von zusammengesetzten Begriffen:

  • Eine Liste ist eine bestellte Sammlung von Begriffen. Es wird durch eckige Klammern mit den Begriffen angezeigt, die durch Kommas oder im Fall von der leeren Liste getrennt sind. Zum Beispiel oder.
  • Schnuren: Eine Folge von durch Notierungen umgebenen Charakteren ist zu einer Liste von (numerischen) Charakter-Codes, allgemein in der lokalen Charakter-Verschlüsselung oder Unicode wenn die Systembetreuungen Unicode gleichwertig. Zum Beispiel.

Regeln und Tatsachen

Einleitungsprogramme beschreiben Beziehungen, die mittels Klauseln definiert sind. Reine Einleitung wird auf Klauseln von Horn eingeschränkt. Es gibt zwei Typen von Klauseln: Tatsachen und Regeln. Eine Regel ist der Form

Führen Sie:-Körper an.

und wird gelesen, weil "Kopf wahr ist, wenn Körper wahr ist". Ein Körper einer Regel besteht aus Anrufen zu Prädikaten, die die Absichten der Regel genannt werden. Das eingebaute Prädikat (Bedeutung eines 2-arity Maschinenbedieners mit dem Namen) zeigt Verbindung von Absichten an, und zeigt Trennung an. Verbindungen und Trennungen können nur im Körper erscheinen, nicht im Kopf einer Regel.

Klauseln mit leeren Körpern werden Tatsachen genannt. Ein Beispiel einer Tatsache ist:

Katze (tom).

der zur Regel gleichwertig ist:

Katze (tom):-wahr.

Das eingebaute Prädikat ist immer wahr.

Gegeben die obengenannte Tatsache, man kann fragen:

ist tom eine Katze?

? - Katze (tom).

Ja

welche Dinge sind Katzen?

? - Katze (X).

X = tom

Klauseln mit Körpern werden Regeln genannt. Ein Beispiel einer Regel ist:

Tier (X):-Katze (X).

Wenn wir hinzufügen, dass Regel und fragt, welche Dinge sind Tiere?

? - Tier (X).

X = tom

Wegen der Verwandtschaftsnatur von vielen eingebauten Prädikaten können sie normalerweise in mehreren Richtungen verwendet werden. Zum Beispiel, kann verwendet, um die Länge einer Liste zu bestimmen (eine Liste gegeben werden), sowie ein Listenskelett einer gegebenen Länge zu erzeugen, und auch sowohl Listenskelette als auch ihre Längen zusammen zu erzeugen. Ähnlich kann verwendet, sowohl um zwei Listen (gegeben Listen als auch) anzuhängen sowie eine gegebene Liste in Teile zu spalten (eine Liste gegeben werden). Deshalb genügt ein verhältnismäßig kleiner Satz von Bibliotheksprädikaten für viele Einleitungsprogramme.

Als eine allgemeine Zweck-Sprache stellt Einleitung auch verschiedene eingebaute Prädikate zur Verfügung, um alltägliche Tätigkeiten wie Eingang/Produktion mit der Grafik durchzuführen und sonst mit dem Betriebssystem kommunizierend. Diese Prädikate werden keine Verwandtschaftsbedeutung gegeben und sind nur für die Nebenwirkungen nützlich, die sie auf dem System ausstellen. Zum Beispiel zeigt das Prädikat einen Begriff auf dem Schirm.

Einschätzung

Die Ausführung eines Einleitungsprogramms wird durch die Versetzung des Benutzers einer einzelnen Absicht, genannt die Abfrage begonnen. Logisch versucht der Einleitungsmotor, eine Entschlossenheitswiderlegung der verneinten Abfrage zu finden. Die durch die Einleitung verwendete Entschlossenheitsmethode wird SLD Entschlossenheit genannt. Wenn die verneinte Abfrage widerlegt werden kann, hieraus folgt dass die Abfrage, mit der passenden Variable bindings im Platz, eine logische Folge des Programms ist. In diesem Fall wird die ganze erzeugte Variable bindings dem Benutzer berichtet, und, wie man sagt, ist die Abfrage erfolgreich gewesen. Betrieblich kann von der Ausführungsstrategie der Einleitung gedacht werden, weil eine Generalisation der Funktion andere Sprachen, ein Unterschied herbeiruft, der ist, dass vielfache Klausel-Köpfe einen gegebenen Anruf vergleichen können. In diesem Fall schafft das System einen auserlesenen Punkt, vereinigt die Absicht mit dem Klausel-Kopf der ersten Alternative, und geht mit den Absichten dieser ersten Alternative weiter. Wenn eine Absicht im Laufe der Durchführung des Programms, die ganze Variable bindings scheitert, die gemacht wurden, seitdem der neuste auserlesene Punkt geschaffen wurde, werden aufgemacht, und Ausführung geht mit der folgenden Alternative dieses auserlesenen Punkts weiter. Diese Ausführungsstrategie wird das chronologische Zurückverfolgen genannt. Zum Beispiel:

mother_child (trude, Ausfall).

father_child (tom, Ausfall).

father_child (tom, erica).

father_child (Mikrophon, tom).

Geschwister (X, Y):-parent_child (Z, X), parent_child (Z, Y).

parent_child (X, Y):-father_child (X, Y).

parent_child (X, Y):-mother_child (X, Y).

</Quelle>

Das läuft auf die folgende Abfrage hinaus, die als wahr wird bewertet:

? - Geschwister (Ausfall, erica).

Ja

Das wird wie folgt erhalten: Am Anfang ist der einzige zusammenpassende Klausel-Kopf für die Abfrage der erste, so Beweis, dass die Abfrage zum Beweis des Körpers dieser Klausel mit der passenden Variable bindings im Platz, d. h., die Verbindung gleichwertig ist. Die folgende Absicht, bewiesen zu werden, ist der leftmost eine dieser Verbindung, d. h.. Zwei Klausel-Köpfe vergleichen diese Absicht. Das System schafft einen auserlesenen Punkt und versucht die erste Alternative, deren Körper ist. Diese Absicht kann verwendend der Tatsache bewiesen werden, so wird die Schwergängigkeit erzeugt, und die folgende Absicht, bewiesen zu werden, der zweite Teil der obengenannten Verbindung ist:. Wieder kann das durch die entsprechende Tatsache bewiesen werden. Seitdem alle Absichten bewiesen werden konnten, ist die Abfrage erfolgreich. Seitdem die Abfrage keine Variablen enthalten hat, werden keine bindings dem Benutzer berichtet. Eine Abfrage mit Variablen, wie:

? - father_child (Vater, Kind).

zählt alle gültigen Antworten auf dem Zurückverfolgen auf.

Bemerken Sie, dass mit dem Code wie oben angegeben die Abfrage auch erfolgreich ist. Man würde zusätzliche Absichten einfügen, die relevanten Beschränkungen, wenn gewünscht, zu beschreiben.

Schleifen und recursion

Wiederholende Algorithmen können mittels rekursiver Prädikate durchgeführt werden.

Ablehnung

Das eingebaute Einleitungsprädikat stellt Ablehnung als Misserfolg zur Verfügung, der das nichtmonotonische Denken berücksichtigt. Die Absicht in der Regel

ungesetzlich (X):-\+ gesetzlich (X).

wird wie folgt bewertet: Einleitung versucht, sich zu erweisen. Wenn ein Beweis für diese Absicht gefunden werden kann, scheitert die ursprüngliche Absicht (d. h.,). Wenn kein Beweis gefunden werden kann, ist die ursprüngliche Absicht erfolgreich. Deshalb wird der Präfix-Maschinenbediener den "nicht nachweisbaren" Maschinenbediener genannt, da die Abfrage erfolgreich ist, wenn Absicht nicht nachweisbar ist. Diese Art der Ablehnung ist gesund, wenn sein Argument "Boden" ist (d. h. keine Variablen enthält). Stichhaltigkeit wird verloren, wenn das Argument Variablen enthält und das Probeverfahren abgeschlossen ist. Insbesondere die Abfrage kann jetzt nicht verwendet werden, um alle Dinge aufzuzählen, die ungesetzlich sind.

Beispiele

Hier folgen Sie einigen in der Einleitung geschriebenen Beispiel-Programmen.

Hallo Welt

Ein Beispiel einer Abfrage:

? - schreiben ('Hallo Welt!'), nl.

Hallo Welt!

wahr.

? -

</Quelle>

Bearbeiter-Optimierung

Jede Berechnung kann Aussage-als eine Folge von Zustandübergängen ausgedrückt werden. Als ein Beispiel konnte ein Optimierungsbearbeiter mit drei Optimierungspässen als eine Beziehung zwischen einem anfänglichen Programm und seiner optimierten Form durchgeführt werden:

program_optimized (Prog0, Prog): -

optimization_pass_1 (Prog0, Prog1),

optimization_pass_2 (Prog1, Prog2),

optimization_pass_3 (Prog2, Prog).

</Quelle>

oder gleichwertig das Verwenden DCG Notation:

program_optimized-> optimization_pass_1, optimization_pass_2, optimization_pass_3.

</Quelle>

Schnellsortierung

Der Schnellsortierungssortieren-Algorithmus, eine Liste mit seiner sortierten Version verbindend:

Teilung ([], _, [], []).

Teilung ([X|Xs], Türangel, Smalls, Bigs): -

(X

Smalls = [X|Rest],

Teilung (Xs, Türangel, Rest, Bigs)

; Bigs = [X|Rest],

Teilung (Xs, Türangel, Smalls, Rest)

).

Schnellsortierung ([])-> [].

Schnellsortierung ([X|Xs])->

{Teilung (Xs, X, Kleiner, Größer)},

Schnellsortierung (Kleiner), [X], (Größere) Schnellsortierung.

</Quelle>

Designmuster

Ein Designmuster ist eine allgemeine Mehrweglösung eines allgemein vorkommenden Problems im Softwaredesign. In der Einleitung gehen Designmuster unter verschiedenen Namen: Skelette und Techniken, Klischees, Programm-Diagramme und Logikbeschreibungsdiagramme. Eine Alternative zu Designmustern ist höhere Ordnungsprogrammierung.

Höherwertige Programmierung

Definitionsgemäß erlaubt Logik der ersten Ordnung Quantifizierung über Prädikate nicht. Ein höherwertiges Prädikat ist ein Prädikat, das ein oder mehr andere Prädikate als Argumente nimmt. Einleitung hat bereits einige eingebaute höherwertige Prädikate solcher als, und. Außerdem, da willkürliche Einleitungsabsichten gebaut und an der Durchlaufzeit bewertet werden können, ist es leicht, höherwertige Prädikate wie zu schreiben, der ein willkürliches Prädikat auf jedes Mitglied einer gegebenen Liste anwendet, und der Filterelemente, die ein gegebenes Prädikat befriedigen, auch berücksichtigend mit Currysoße zuzubereiten.

Um Lösungen von der zeitlichen Darstellung (Antwort-Ersetzungen auf dem Zurückverfolgen) zur Raumdarstellung (Begriffe) umzuwandeln, hat Einleitung verschiedene Volllösungsprädikate, die alle Antwort-Ersetzungen einer gegebenen Abfrage in einer Liste sammeln. Das kann für das Listenverständnis verwendet werden. Zum Beispiel kommen vollkommene Zahlen der Summe ihrer richtigen Teiler gleich:

vollkommen (N): -

zwischen (1, inf, N), ist U N//2,

findall (D, (zwischen (1, U, D), N mod D =: = 0), Ds),

sumlist (Ds, N).

</Quelle>

Das kann verwendet werden, um vollkommene Zahlen aufzuzählen, und auch zu überprüfen, ob eine Zahl vollkommen ist.

Module

Um im großen zu programmieren, stellt Einleitung ein Modul-System zur Verfügung. Das Modul-System wird durch ISO standardisiert. Jedoch unterstützen nicht alle Einleitungsbearbeiter Module, und es gibt Vereinbarkeitsprobleme zwischen den Modul-Systemen der Haupteinleitungsbearbeiter. Folglich werden über einen Einleitungsbearbeiter geschriebene Module an anderen nicht notwendigerweise arbeiten.

Syntaxanalyse

Es gibt genannte bestimmte Klausel-Grammatiken einer speziellen Notation (DCGs). Eine Regel, die über statt definiert ist, wird durch den Vorverarbeiter (eine Möglichkeit ausgebreitet, die Makros auf anderen Sprachen analog ist) gemäß einigen aufrichtigen Neuschreiben-Regeln, auf gewöhnliche Einleitungsklauseln hinauslaufend. Am meisten namentlich stattet das Neuschreiben das Prädikat mit zwei zusätzlichen Argumenten aus, die verwendet werden können, um Staat ringsherum, analog monads auf anderen Sprachen implizit einzufädeln. DCGs werden häufig verwendet, um parsers oder Listengeneratoren zu schreiben, weil sie auch eine günstige Schnittstelle zur Verfügung stellen, um Unterschiede zu verzeichnen.

Meta-Dolmetscher und Nachdenken

Einleitung ist eine homoiconic Sprache und stellt viele Möglichkeiten für das Nachdenken zur Verfügung. Seine implizite Ausführungsstrategie macht es möglich, einem kurzen meta-kreisförmigen Schätzer (auch genannt Meta-Dolmetscher) für den reinen Einleitungscode zu schreiben. Da Einleitungsprogramme selbst Folgen von Einleitungsbegriffen sind (ist ein Infix-Maschinenbediener), die leicht gelesen werden und verwendende eingebaute Mechanismen (wie) untersucht haben, ist es leicht, kundengerecht angefertigten Dolmetschern zu schreiben, die Einleitung mit bereichsspezifischen Eigenschaften vermehren.

Vollständigkeit von Turing

Reine Einleitung basiert auf einer Teilmenge der Prädikat-Logik der ersten Ordnung, Klauseln von Horn, der Turing-abgeschlossen ist. Die Vollständigkeit von Turing der Einleitung kann durch das Verwenden davon gezeigt werden, um eine Maschine von Turing vorzutäuschen:

turing (Tape0, Band): -

leisten Sie (q0, [], Ls, Tape0, Rs),

Rückseite (Ls, Ls1),

hängen Sie (Ls1, Rs, Band) an.

leisten Sie (qf, Ls, Ls, Rs, Rs):-!.

leisten Sie (Q0, Ls0, Ls, Rs0, Rs): -

Symbol (Rs0, Sym, RsRest),

einmal (Regel (Q0, Sym, Q1, NewSym, Handlung)),

Handlung (Handlung, Ls0, Ls1, [NewSym|RsRest], Rs1),

leisten Sie (Q1, Ls1, Ls, Rs1, Rs).

Symbol ([], b, []).

Symbol ([Sym|Rs], Sym, Rs).

Handlung (verlassen, Ls0, Ls, Rs0, Rs):-ist (Ls0, Ls, Rs0, Rs) abgereist.

Handlung (bleiben Ls, Ls, Rs, Rs).

Handlung (Recht, Ls0, [Sym|Ls0], [Sym|Rs], Rs).

verlassen ([], [], Rs0, [b|Rs0]).

verlassen ([L|Ls], Ls, Rs, [L|Rs]).

</Quelle>

Ein einfaches Beispiel Maschine von Turing wird durch die Tatsachen angegeben:

Regel (q0, 1, q0, 1, Recht).

Regel (q0, b, bleiben qf, 1,).

</Quelle>

Diese Maschine führt Zunahme durch eine einer Zahl in der unären Verschlüsselung durch: Es schlingt sich über jede Zahl "1" Zellen und hängt zusätzlicher "1" am Ende an. Beispiel-Abfrage und Ergebnis:

? - turing ([1,1,1], Ts).

Ts = [1, 1, 1, 1];

</Quelle>

Das illustriert, wie jede Berechnung Aussage-als eine Folge von Zustandübergängen ausgedrückt werden kann, die in der Einleitung als eine Beziehung zwischen aufeinander folgenden Staaten von Interesse durchgeführt sind.

Durchführung

ISO Einleitung

Der ISO Einleitungsstandard besteht aus zwei Teilen. ISO/IEC 13211-1, veröffentlicht 1995, hat zum Ziel, die vorhandenen Methoden der vielen Durchführungen der Kernelemente der Einleitung zu standardisieren. Es hat Aspekte der Sprache geklärt, die vorher zweideutig waren und zu tragbaren Programmen führt. Es gibt zwei Berichtigung: Mein Gott 1:2007 und Mein Gott 2:2012. ISO/IEC 13211-2, veröffentlicht 2000, fügt Unterstützung für Module zum Standard hinzu. Der Standard wird durch den ISO/IEC JTC1/SC22/WG17 Arbeitsgruppe aufrechterhalten. ANSI X3J17 ist US Technical Advisory Group für den Standard.

Kompilation

Für die Leistungsfähigkeit wird Einleitungscode normalerweise zum Code der abstrakten Maschine häufig unter Einfluss des Register-basierten Befehlssatzes von Warren Abstract Machine (WAM) kompiliert. Einige Durchführungen verwenden abstrakte Interpretation, um Typ und Weise-Information von Prädikaten während der Übersetzung abzuleiten, oder zum echten Maschinencode für die hohe Leistung zu kompilieren. Das Planen effizienter Durchführungsmethoden für den Einleitungscode ist ein Feld der aktiven Forschung in der Logikprogrammiergemeinschaft, und verschiedene andere Ausführungsmethoden werden in einigen Durchführungen verwendet. Diese schließen Klausel binarization und Stapel-basierte virtuelle Maschinen ein.

Schwanz recursion

Einleitungssysteme führen normalerweise eine wohl bekannte Optimierungsmethode genannt Schwanz-Anruf-Optimierung (TCO) nach deterministischen Prädikaten durch, die Schwanz recursion oder, mehr allgemein, Schwanz-Anrufe ausstellen: Ein Stapel-Rahmen einer Klausel wird vor dem Durchführen eines Anrufs in einer Schwanz-Position verworfen. Deshalb werden deterministische mit dem Schwanz rekursive Prädikate mit dem unveränderlichen Stapel-Raum wie Schleifen auf anderen Sprachen durchgeführt.

Das Begriff-Indexieren

Entdeckung von Klauseln, die unifiable mit einem Begriff in einer Abfrage sind, ist in der Zahl von Klauseln geradlinig. Das Begriff-Indexieren verwendet eine Datenstruktur, die subgeradlinig-maligen lookups ermöglicht. Das Indexieren betrifft nur Programm-Leistung, es betrifft Semantik nicht.

Das Tabellarisieren

Einige Einleitungssysteme, (BProlog, XSB und Kläffen), führen eine memoization Methode durch, haben das Tabellarisieren genannt, das den Benutzer davon befreit, Zwischenergebnisse manuell zu versorgen.

Durchführung in der Hardware

Während des Fünften Generationscomputersystemprojektes gab es Versuche, Einleitung in der Hardware mit dem Ziel durchzuführen, schnellere Ausführung mit hingebungsvollen Architekturen zu erreichen. Außerdem hat Einleitung mehrere Eigenschaften, die Beschleunigung durch die parallele Ausführung erlauben können. Eine neuere Annäherung hat eingeschränkte Einleitungsprogramme zu einer programmierbaren Feldtor-Reihe kompilieren sollen. Jedoch hat der schnelle Fortschritt in der Mehrzweckhardware mehr spezialisierte Architekturen durchweg eingeholt.

Kritik

Obwohl Einleitung in der Forschung und Ausbildung weit verwendet wird, haben Einleitung und andere Logikprogrammiersprachen keinen bedeutenden Einfluss auf die Computerindustrie im Allgemeinen gehabt. Die meisten Anwendungen sind nach Industriestandards, mit wenigem Übersteigen von 100,000 Linien des Codes klein. Wie man betrachtet, wird die Programmierung im großen kompliziert, weil nicht alle Einleitungsbearbeiter Module unterstützen, und es Vereinbarkeitsprobleme zwischen den Modul-Systemen der Haupteinleitungsbearbeiter gibt. Die Beweglichkeit des Einleitungscodes über Durchführungen ist auch ein Problem gewesen, aber Entwicklungen seit 2007 haben bedeutet: "Die Beweglichkeit innerhalb der Familie von Edinburgh/Quintus hat abgestammt Einleitungsdurchführungen ist gut genug, um das Aufrechterhalten tragbarer wirklicher Anwendungen zu berücksichtigen."

In der Einleitung entwickelte Software ist dafür kritisiert worden, eine hohe Leistungsstrafe im Vergleich zu herkömmlichen Programmiersprachen zu haben. Jedoch haben Fortschritte in Durchführungsmethoden die Strafen zu nur 25 %-50 % für einige Anwendungen reduziert.

Erweiterungen

Verschiedene Durchführungen sind aus der Einleitung entwickelt worden, um Logikprogrammierfähigkeiten in zahlreichen Richtungen zu erweitern. Diese schließen Typen, Weisen, Einschränkungslogikprogrammierung (CLP), objektorientierte Logikprogrammierung (OOLP), Parallelität, geradlinige Logik (LLP), funktionelle und höherwertige Logikprogrammierfähigkeiten plus die Zwischenfunktionsfähigkeit mit Kenntnisse-Basen ein:

Typen

Einleitung ist eine ungetippte Sprache. Versuche, Typen einzuführen, gehen auf die 1980er Jahre zurück, und bezüglich 2008 gibt es noch Versuche, Einleitung mit Typen zu erweitern. Typ-Information ist nicht nur für die Typ-Sicherheit nützlich sondern auch um über Einleitungsprogramme vernünftig zu urteilen.

Weisen

Die Syntax der Einleitung gibt nicht an, welche Argumente eines Prädikats Eingänge sind, und die Produktionen sind. Jedoch ist diese Information bedeutend, und es wird empfohlen, dass es in die Anmerkungen eingeschlossen wird. Weisen geben wertvolle Auskunft, wenn sie über Einleitungsprogramme vernünftig urteilen, und können auch verwendet werden, um Ausführung zu beschleunigen.

Einschränkungen

Einschränkungslogikprogrammierung erweitert Einleitung, um Konzepte von der Einschränkungsbefriedigung einzuschließen. Ein Einschränkungslogikprogramm erlaubt Einschränkungen im Körper von Klauseln wie: Ihm wird groß angelegten kombinatorischen Optimierungsproblemen angepasst. und ist so für Anwendungen in Industrieeinstellungen, wie automatisierter zeit und Arbeitsvorbereitung nützlich. Der grösste Teil des Einleitungssystemschiffs mit mindestens einer Einschränkung solver für begrenzte Gebiete, und häufig auch mit solvers für andere Gebiete wie rationale Zahlen.

Höherwertige Programmierung

HiLog und λProlog erweitern Einleitung mit höherwertigen Programmiereigenschaften. ISO Einleitung unterstützt jetzt die eingebauten Prädikate... die höherwertige Programmierung und Lambda-Abstraktionen erleichtern.

maplist (_Cont, [], []).

maplist (Cont, [X1|X1s], [X2|X2s]): -

rufen Sie (Cont, X1, X2),

maplist (Cont, X1s, X2s).

</Quelle>

Gegenstand-Orientierung

Logtalk ist eine objektorientierte Logikprogrammiersprache, die die meisten Einleitungsdurchführungen als ein Zurückende-Bearbeiter verwenden kann. Als eine Mehrparadigma-Sprache schließt es Unterstützung sowohl für Prototypen als auch für Klassen ein.

Oblog ist eine kleine, tragbare, objektorientierte Erweiterung auf die Einleitung von Margaret McDougall von EdCAAD, Universität Edinburghs.

Objlog war ein rahmenbasiertes Sprachkombinieren Gegenstände und Einleitung II von CNRS, Marseille, Frankreich.

Grafik

Einleitungssysteme, die eine Grafikbibliothek zur Verfügung stellen, sind SWI-Einleitung, Seheinleitung und B-Einleitung.

Parallelität

Einleitung-MPI ist eine SWI-Einleitungserweiterung der offenen Quelle für die verteilte Computerwissenschaft über die Nachricht, die Schnittstelle Passiert. Auch es gibt verschiedene gleichzeitige Einleitungsprogrammiersprachen.

Webprogrammierung

Einige Einleitungsdurchführungen, namentlich SWI-Einleitung, unterstützen Webprogrammierung der Server-Seite mit der Unterstützung für Webprotokolle, HTML und XML. Es gibt auch Erweiterungen, um semantische Webformate wie RDF und EULE zu unterstützen. Einleitung ist auch als eine Kundenseite-Sprache angedeutet worden.

Adobe Flash

Zeder ist ein freier und grundlegender Einleitungsdolmetscher. Von der Version 4 und über der Zeder hat einen FCA (Blitz-Zeder App) Unterstützung. Das stellt eine neue Plattform der Programmierung in der Einleitung durch ActionScript zur Verfügung.

Anderer

  • F-Logik erweitert Einleitung mit Rahmen/Gegenständen für die Kenntnisse-Darstellung.
  • AI ist Einleitung geschaffen worden, um auf den Mangel der Einleitung an der Grafik und Schnittstelle zu antworten.

Schnittstellen in andere Sprachen

Fachwerk besteht, der zwischen Einleitung und anderen Sprachen überbrücken kann:

  • Die Logikserver-API erlaubt sowohl die Erweiterung als auch das Einbetten der Einleitung in C, C ++, Java, VB, Delphi.NET und jede Sprache/Umgebung, die einen.dll oder.so nennen kann. Es wird für Amzi durchgeführt! Einleitung Amzi! Einleitung + Logikserver, aber die API-Spezifizierung kann für jede Durchführung bereitgestellt werden.
  • JPL ist die bidirektionale Java Prolog Bridge der Schiffe mit der SWI-Einleitung standardmäßig, Java und Einleitung erlaubend, einander (rekursiv) zu nennen. Wie man bekannt, hat es gute Parallelitätsunterstützung und ist unter der aktiven Entwicklung.
  • InterProlog, eine Programmierbibliotheksbrücke zwischen Java und Einleitung, bidirektionales Prädikat/Methode durchführend, das zwischen beiden Sprachen ruft. Javanische Gegenstände können in Einleitungsbegriffe und umgekehrt kartografisch dargestellt werden. Erlaubt die Entwicklung von GUIs und anderer Funktionalität in Java, während man Logik verlässt, die in der Einleitungsschicht in einer Prozession geht. Unterstützungen XSB, SWI-Einleitung und KLÄFFEN.
  • Prova versorgt heimische Syntax-Integration mit Java, Reagenz-Nachrichtenübermittlung und Reaktionsregeln. Positionen von Prova selbst als ein System des regelbasierenden scripting (RBS) für middleware. Die Sprache bricht neuen Boden im Kombinieren befehlender und Aussageprogrammierung.
  • PROL Ein embeddable Einleitungsmotor für Java. Es schließt einen kleinen IDE und einige Bibliotheken ein.
  • DIE GNU-Einleitung für Java ist eine Durchführung der ISO Einleitung als eine javanische Bibliothek (gnu.prolog)
  • Ciao stellt Schnittstellen C, C ++, Java und Verwandtschaftsdatenbanken zur Verfügung.
  • C#-Prolog ist ein Einleitungsdolmetscher, der darin geschrieben ist (geführtem) C#. Kann in C# Programme leicht integriert werden. Eigenschaften: Der zuverlässige und ziemlich schnelle Dolmetscher, befehlen Sie Linienschnittstelle, Windows-Schnittstelle, eingebautem DCG, XML-Prädikaten, SQL-Prädikaten, ausdehnbar. Der ganze Quellcode ist einschließlich eines parser Generators verfügbar, der verwendet werden kann, um spezielle Zweck-Erweiterungen hinzuzufügen.

Geschichte

Der Name Einleitung wurde von Philippe Roussel als eine Abkürzung für (Französisch gewählt, um in der Logik zu programmieren). Es wurde 1972 von Alain Colmerauer mit Philippe Roussel geschaffen, der auf der Verfahrensinterpretation von Robert Kowalski von Klauseln von Horn gestützt ist. Es wurde teilweise durch den Wunsch motiviert, den Gebrauch der Logik als eine Aussagekenntnisse-Darstellungssprache mit der Verfahrensdarstellung von Kenntnissen beizulegen, die in Nordamerika gegen Ende der 1960er Jahre und Anfang der 1970er Jahre populär waren. Gemäß Robert Kowalski wurde das erste Einleitungssystem 1972 von Alain Colmerauer und Phillipe Roussel entwickelt. Die ersten Durchführungen der Einleitung waren Dolmetscher jedoch, David H. D. Warren hat die Abstrakte Maschine von Warren, einen frühen und einflussreichen Einleitungsbearbeiter geschaffen, der gekommen ist, um den "Edinburgh Einleitung" Dialekt zu definieren, der als die Basis für die Syntax von den meisten modernen Durchführungen gedient hat.

Viel von der modernen Entwicklung der Einleitung ist aus dem Impuls des Fünften Generationscomputersystemprojektes (FGCS) gekommen, der eine Variante der Einleitung genannt die Kernsprache für sein erstes Betriebssystem entwickelt hat.

Reine Einleitung wurde auf den Gebrauch eines Entschlossenheitslehrsatzes prover mit Klauseln von Horn der Form ursprünglich eingeschränkt:

H: - B..., B.

Die Anwendung des Lehrsatzes-prover behandelt solche Klauseln als Verfahren:

um H zu zeigen zu/lösen, zeigen Sie B und... und B/lösen Sie.

Reine Einleitung wurde bald jedoch erweitert, um Ablehnung als Misserfolg einzuschließen, in dem negative Bedingungen der Form nicht (B) gezeigt werden, indem sie versucht wird und gescheitert wird, die entsprechenden positiven Bedingungen B zu lösen.

Nachfolgende Erweiterungen der Einleitung durch die ursprüngliche Mannschaft haben Einschränkungslogik Programmierung von geistigen Anlagen in die Durchführungen eingeführt.

Siehe auch

  • Vergleich von Einleitungsdurchführungen
  • Das Logico-Sprachmodellieren. Eine Methode, um wissensbasiertes System zu bauen, das Einleitung verwendet.

Zusammenhängende Sprachen

  • Die Gödel Sprache ist eine stark getippte Durchführung der gleichzeitigen Einschränkungslogikprogrammierung. Darauf wird auf SICStus Einleitung gebaut.
  • Seheinleitung, früher bekannt als die PDC Einleitungs- und Turboeinleitung, ist ein stark getippter objektorientierter Dialekt der Einleitung, die von der Standardeinleitung sehr verschieden ist. Als Turboeinleitung wurde es von Borland auf den Markt gebracht, aber es wird jetzt entwickelt und durch den dänischen festen PDC auf den Markt gebracht (Einleitungsentwicklungszentrum), der es ursprünglich erzeugt hat.
  • Datalog ist eine Teilmenge der Einleitung. Es wird auf Beziehungen beschränkt, die geschichtet sein können und zusammengesetzte Begriffe nicht erlauben. Im Gegensatz zur Einleitung ist Datalog nicht Turing-abgeschlossen.
  • CSC GraphTalk ist eine Eigentumsdurchführung von Warrens Abstrakter Maschine mit zusätzlichen objektorientierten Eigenschaften.
  • In mancher Hinsicht ist Einleitung eine Teilmenge des Planers. Die Ideen im Planer wurden später weiter in der Wissenschaftlichen Gemeinschaftsmetapher entwickelt.
  • AgentSpeak ist eine Variante der Einleitung, um Agent-Verhalten in Mehragent-Systemen zu programmieren.

Weiterführende Literatur

  • Patrick Blackburn, Johan Bos, Kristina Striegnitz, Erfährt Einleitung Jetzt! 2006, internationale Standardbuchnummer 1-904987-17-6.
  • Ivan Bratko, EINLEITUNGS-Programmierung für die Künstliche Intelligenz, 2000, internationale Standardbuchnummer 0-201-40375-7.
  • William F. Clocksin, Christopher S. Mellish: Programmierung in der Einleitung: Das Verwenden des ISO Standards. Springer, 5. Hrsg., 2003, internationale Standardbuchnummer 978-3540006787. (Diese Ausgabe wird für die ISO Einleitung aktualisiert. Vorherige Ausgaben haben Edinburgher Einleitung beschrieben.)
  • William F. Clocksin: Klausel und Wirkung. Einleitungsprogrammierung für den Arbeitsprogrammierer. Springer, 2003, internationale Standardbuchnummer 978-3540629719.
  • Alain Colmerauer und Philippe Roussel, Die Geburt der Einleitung, im zweiten ACM SIGPLAN Konferenz für die Geschichte von Programmiersprachen, p. 37-52, 1992.
  • Michael A. Covington, Donald Nute, Andre Vellino, Einleitung, die eingehend, 1996, internationale Standardbuchnummer 0 13 138645 X Programmiert.
  • Michael A. Covington, Verarbeitung der natürlichen Sprache für Einleitungsprogrammierer, 1994, internationale Standardbuchnummer 0-13-62921
  • Robert Smith, John Gibson, Aaron Sloman: 'Die virtuelle Zwei-Niveaus-Maschine von POPLOG unterstützt für interaktive Sprachen in Forschungsrichtungen im Erkenntnistheorie-Band 5: Künstliche Intelligenz, Hrsg. D. Sleeman und N. Bernsen, Lawrence Erlbaum Associates, Seiten 203-231, 1992.
  • Leon Sterling und Ehud Shapiro, Die Kunst der Einleitung: Fortgeschrittene Programmiertechniken, 1994, internationale Standardbuchnummer 0-262-19338-8.
  • Robert Kowalski, Die Frühen Jahre der Logikprogrammierung, CACM Januar 1988.
  • ISO/IEC 13211: Informationstechnologie - Programmiersprachen - Einleitung. Internationale Organisation für die Standardisierung, Genf.
  • Richard O'Keefe, Das Handwerk der Einleitung, internationale Standardbuchnummer 0-262-15039-5.
  • David H D Warren, Luis M. Pereira und Fernando Pereira, Einleitung - die Sprache und seine Durchführung im Vergleich zum Lispeln. ACM SIGART Meldungsarchiv, Ausgabe 64. Verhandlungen des 1977-Symposiums auf der Künstlichen Intelligenz und den Programmiersprachen, Seiten 109 - 115.

Außenverbindungen

häufig gestellte

Eigenname (Philosophie) / Phil Zimmermann
Impressum & Datenschutz