2016-05-25 14 views
6

Es gibt Compiler für Prolog, aber andere Websites sagen, dass die Sprache selbst eine interpretierte Sprache ist. Ich bin verwirrt, wenn Prolog wirklich eine interpretierte Sprache ist. Kann jemand bitte klären, ob was die Sprache wirklich ist? Kompilierte Sprache oder interpretierte Sprache?Prolog: eine kompilierte oder interpretierte Sprache oder beides?

+2

Abhängig von der Implementierung Prolog natürlich –

+4

Die Sprache selbst nur ein lanugage ist: Sie können es kompilieren, interpretieren sie, lesen, analysieren sie, übersetzen sie in andere Sprachen etc ... – mat

Antwort

6

Um dies zu beantworten, lassen Sie einige Definitionen niederschlagen.

Eine kompilierte Sprache konvertiert Quellcodedateien in eine Form (Binärcode, Bytecode usw.) zur eigenständigen Ausführung oder in eine Bibliothek zur Verknüpfung mit anderen Programmen. Die Konstrukte sind festgelegt und können nicht geändert werden.

Eine interpretierte Sprache konvertiert ein Konstrukt in eine Form, die nach der Konvertierung ausgeführt werden kann. Jedes konvertierte Konstrukt wird typischerweise in einen Speicher abgelegt, auf den spätere Konstrukte referenzieren können.

Jetzt können viele Programmiersprachen sowohl kompiliert als auch interpretiert werden, es gibt keine Regel, die besagt, dass eine Programmiersprache nur die eine oder die andere sein kann.

In den frühen Tagen waren die meisten Programmiersprachen die eine oder andere, z.B. C++ - kompiliert, BASIC - interpretiert.

nun Ihre Frage zu beantworten:

Prolog: eine kompilierte oder interpretierte Sprache oder beides?

Die Prolog-Sprache kann kompiliert werden und interpretiert werden, so dass die Antwort beides ist.

Der Grund, warum Sie unterschiedliche Antworten für verschiedene Websites sehen, ist, dass Sie über die Sprache fragen, denken Sie an die Prolog-Sprache als abstract concept, aber bei bestimmten Implementierungen suchen, denken Sie an den Seiten als zu einem concrete implementation verweisen. Manche tun das eine oder das andere und manche tun beides. In den letzten paar Jahren, meiner Meinung nach, wird der Konsens erreicht, dass man, wenn man eine Programmiersprache hat, einen Compiler zum Erzeugen von effizientem Code und eine REPL haben muss, die einen Interpreter für die schnelle Entwicklung von Konstrukten verwendet.

Normalerweise besteht der Trend darin, grundlegende Programmierkonstrukte mithilfe der REPL zu entwickeln und zu testen und sie dann in Quellcodedateien zu verschieben, die zum Erstellen von Bibliotheken kompiliert werden. Die Bibliotheken werden dann von der REPL referenziert; spülen und wiederholen.

Interessanterweise Prolog war die erste Sprache, die ich hatte, die beide hatte, und das war in den 1980er Jahren.

Wenn Sie ISO/IEC 13211 Information technology -- Programming languages -- Prolog -- Part 1: General core lesen heißt es:

Die Sprache von der Arbeit von Robert A. in den frühen 1970er Jahren stammt Kowalski, während an der Universität Edinburgh (und seitdem am Imperial College, London) und Alain Colmerauer an der Universität von Aix-Marseille in Frankreich. Ihre Bemühungen führten 1972 zur Verwendung von formalen Logik als Grundlage für eine Programmiersprache. Kowalskis Forschung lieferte den theoretischen Rahmen, während Colmerauer's Aufstieg zur Programmiersprache Prolog gab. Colmerauer und sein Team dann bauten den ersten Interpreter, und David Warren an der AI Abteilung, University of Edinburgh, produzierte den ersten Compiler.

8

Die meisten Implementierungen werden in Byte-Code kompiliert und auf einer Prolog-VM ausgeführt. Implementierungen verwenden ihre eigenen VMs mit unterschiedlichen Designwahlen und Trade-Offs.

GNU-Prolog begann als Prolog zu C "transpiler", jetzt ist es in nativem Code kompiliert.

Sie haben auch Logtalk (OOP mit Prolog), die, soweit ich weiß, die Logtalk-Quelle in Prolog neu schreibt. Es kann ein ganzes Array von Prolog-Implementierungen als Backends verwenden, sodass es als Kompatibilitätsschicht zwischen Prolog-Implementierungen verwendet werden kann.

Diese Frage kann wirklich nicht beantwortet werden; Sie sollten die Dokumentation jeder einzelnen Prolog-Implementierung lesen, an der Sie interessiert sind. Die beste Antwort, die Sie bekommen können, ist jedoch, wie eine bestimmte Prolog-Implementierung es macht. Prolog die Sprache ist nur das: eine Programmiersprache, keine Laufzeit oder eine VM oder ein Compiler und so weiter.

+5

Sie richtig sind. W.r.t. Logtalk, sein Compiler ist ein dreistufiger Compiler, wobei die dritte und letzte Stufe den Backend-Prolog-Compiler für die generierten Prolog-Zwischendateien aufrufen. Was hier passiert, hängt natürlich vom gewählten Prolog-Compiler ab. Dies ist kein ungewöhnlicher Ansatz (z. B. C++ und Cfront in den frühen Tagen). –

Verwandte Themen