Historischer Präzedenzfall, warum Prolog in der Imperativen Programmierung weniger populär ist als SQL? [geschlossen]

12

Es scheint, dass das Schreiben von Deklarativen SQL in der Imperativen Programmierung sehr beliebt ist . Es scheint jedoch auch, dass das Schreiben von Declarative Prolog eine Menge Komplexität einsparen könnte, aber dies ist nicht sehr häufig.

Gibt es einen historischen Präzedenzfall für diese offensichtliche Präferenz von SQL gegenüber Prolog?

Wenn der Grund für die mangelnde native Unterstützung durch imperative Sprachen liegt, ist es dann möglich zu beantworten, warum die Sprachentwickler es nicht für nützlich hielten, native Unterstützung überhaupt zu bieten Prolog?


Um einige spezifische Beispiele bereitzustellen:

Beispiel 1 Die
Bewertung eines Kreditantrags kann nur wenige Codezeilen umfassen Prolog, wie die SELECT/JOINAbfrage, die nur wenige Codezeilen enthält. SQLDer Vorteil ist jedoch offensichtlich nicht so offensichtlich wie SQL.

Beispiel 2
Hier ist ein weiteres Beispielproblem und die Lösung in Prolog. Das folgende Constraint-Logik-Programm repräsentiert einen vereinfachten Datensatz von Johns Geschichte als Lehrer:

teaches(john, hardware, T) :- 1990  T, T < 1999.
teaches(john, software, T) :- 1999  T, T < 2005.
teaches(john, logic, T) :- 2005  T, T  2012.
rank(john, instructor, T) :- 1990  T, T < 2010.
rank(john, professor, T) :- 2010  T, T < 2014.

Die folgende Zielklausel fragt den Datensatz ab, um herauszufinden, wann John sowohl Logik unterrichtet hat als auch Professor war :

:- teaches(john, logic, T), rank(john, professor, T).

Ergebnis:

2010  T, T  2012.

Im obigen Beispiel ist es einfach SQL, dasselbe Ergebnis zu erzielen. Angenommen, Sie haben diese Daten in einem Array. Dann ist es nicht so einfach, die gleichen Ergebnisse zu erzielen SQL. Und im Fall von Daten, die in einem Array gespeichert sind, glaube ich, dass der Prolog-Code einfacher zu schreiben und zu warten ist.

53777A
quelle
8
Vielleicht möchten Sie den Randalierungsaspekt herunterschalten.
4
Der Großteil des Textes klingt wie ein Schimpfen gegen Leute, die Prolog nicht benutzen. Darin ist eine Frage enthalten, die es wert ist, gestellt zu werden, aber das andere Zeug (die Beschimpfung) zieht Ablehnungen an und schaltet Leute ab, die eine Antwort beisteuern könnten. Mit anderen Worten, ich schlage vor, Sie versuchen, Ihre Frage wohltätiger zu formulieren.
6
"Zum Beispiel könnte das Auswerten eines Kreditantrags in Prolog nur ein paar Zeilen Code sein." Ich kaufe das nicht, aus dem gleichen Grund, wie jede Anwendung, die es wert ist, vielfach maßgeschneiderte oder generierte SQL-Abfragen verwendet.
Euphoric
7
Vielleicht fehlt mir etwas, aber ich denke, die Antwort lautet: "Die Leute verwenden SQL, weil die Datenbanken dies unterstützen ."
GroßmeisterB
3
Sie tun Verwendung Prolog ... na ja ... eigentlich ... sie tun Verwendung Engines Regeln , die sind „eine Ad - hoc, informell angegeben, verwanzte, langsame Umsetzung der Hälfte des Prologs“ .
Jörg W Mittag

Antworten:

19

Ich glaube, das ist in erster Linie eine historische Sache.

SQL wurde hauptsächlich in Unternehmen zur Erstellung von Geschäftsanwendungen verwendet. Einige Unternehmen bauen ihre Lebendigkeit auf dem Verkauf von SQL-Lösungen auf und verwendeten ihr Geld, um für SQL zu werben und es vielen vorzustellen. Dies wurde insbesondere dadurch ermöglicht, wie wichtig Daten für Geschäftsleute sind. Aus diesem Grund hat SQL viele Mitbewerber für sich gewonnen und ist bis heute weithin bekannt und verbreitet.

Prolog hingegen war vor allem im akademischen Bereich, meist im Bereich der künstlichen Intelligenz, bekannt. Akademiker schieben selten ihre Werkzeuge und Ideen auf eine geschäftliche Weise auf andere. Normalerweise muss ein Unternehmen für eine Technologie werben, die in der Wissenschaft geboren wurde, damit sie sich unter den üblichen Entwicklern verbreitet. Auch wenn Daten extrem wichtig sind, sind die "Geschäftsregeln" dies nicht. Obwohl sie wichtig erscheinen mögen, sind sie viel weniger wichtig als Daten. Geschäftsregeln können in der Regel einfach festgelegt werden. Der Versuch, "kaputte" Daten zu reparieren, ist normalerweise ein viel schwierigeres Problem. Daher konzentrierten sich Unternehmen viel mehr darauf, ihre Datenlösungen als ihre Geschäftsregellösungen zu erhalten.

Euphorisch
quelle
2
"Normalerweise muss ein Unternehmen für eine Technologie werben, die in der Wissenschaft geboren wurde, damit sie sich unter den üblichen Entwicklern verbreitet." Viele gute Ideen werden im akademischen Bereich entwickelt und später von Unternehmen, die die Marketingmacht dazu haben, populär gemacht. +1
Giorgio
6

Der Grund ist eigentlich ziemlich einfach. Es hat nichts damit zu tun, wie nützlich die Sprache für eine bestimmte Aufgabe ist und wie wartbar der Code ist.

Wenn Sie eine SQL-Anweisung lesen, können viele Entwickler feststellen, was die meisten grundlegenden Abfragen tun, ohne die Sprache zu kennen. Bei komplexen Beispielen fällt es ihnen möglicherweise schwerer, vorhandene Codes anzupassen oder anhand von Beispielen zu arbeiten, ist jedoch relativ einfach. Die Barriere für das Verständnis ist für die überwiegende Mehrheit der Anfragen recht niedrig.

Sie lesen ein paar Zeilen des Prologs, und viele Entwickler werden die Aufgabe leicht verschränken und sie einem anderen überlassen und sich möglicherweise hinlegen. Die Prädikatsyntax von Prolog ist einfach nicht einfach zu lesen.

Aktualisieren:

Basierend auf dem Codebeispiel sollten Sprachen, die Auflistungen implementieren, gut funktionieren. Ich habe eine Lösung in C # / Linq implementiert, die nicht wesentlich größer war als das Prolog-Beispiel (nachdem Sie die statische Typisierung und die erforderlichen Definitionen berücksichtigt hatten). In einigen vorläufigen Arbeiten war ein zusätzlicher Schritt erforderlich, um die Listen zu einer einzigen Zeitachse zusammenzuführen, die durchsucht werden musste. Dies war jedoch kein nennenswerter Arbeitsaufwand.

James Snell
quelle
14
Es ist wahr, dass SQL sich für eine ultraverbose und „natürliche“ COBOL-Syntax entschieden hat, die das Lesen „einfach“ macht. Ich bezweifle jedoch sehr, dass jemand, der SQL nicht kennt, eine mittelschwere Aussage mit ein paar joins count(*)oder etwas Ähnlichem richtig verstehen kann. Wenn wir die Grundlagen von SQL verstehen, liegt das daran, dass wir gelegentlich diese Sprache verwenden müssen und daher diese Grundlagen lernen müssen. Relationale Datenspeicherung ist ein weitaus häufigerer Bedarf als das Lösen von Logiksystemen, so dass sich keine vergleichsweise starke Notwendigkeit ergibt, Prolog zu erlernen.
amon
3
@amon Das klingt wie der Beginn einer guten Antwort :-)
Svick
1
Die Barriere zum Erlernen von SQL könnte aufgrund der Lesbarkeit gesenkt werden, Prolog könnte Leute aufgrund der Syntax abwehren, da stimme ich voll und ganz zu. Aber in der Tat ist es nicht so trivial, Unterabfragen und einige Verknüpfungen zu verstehen, ohne SQL zu kennen. Aber die untere Grenze, wenn man mit einfachen Abfragen anfängt, ist sicherlich ein Grund, warum Leute SQL anstelle von Prolog verwenden würden, um anzufangen. :)
Dylan Meeus
4
@ JamesSnell Sorry, aber -1. Was Sie behaupten, stimmt nicht mit RegEx überein . ^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[13-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$.
53777A
1
@JamesSnell RegEx sind kryptisch, schwer zu schreiben, zu debuggen, zu warten und zu modifizieren oder zu erweitern, dennoch sind sie äußerst beliebt. Wenn Sie Recht hätten, hätte RegEx nie seine aktuelle Popularität bei Entwicklern und Sprachentwicklern erreichen sollen.
53777A
4

Es gibt noch einen anderen Grund. In der Praxis ist SQL nützlich für Daten, die auf der Festplatte gespeichert sind. Daher werden Datenbanken verwendet, um Daten für einen "langen" Zeitraum (mehrere Monate) zu speichern. Jede SQL-Datenbank (z. B. PostgreSQL, MySQL, Oracle usw.) verwaltet Daten auf Datenträgern (oder SSDs, dh Hardware, die bei ordnungsgemäßem Herunterfahren Daten speichern kann). Die meisten mir bekannten Prolog-Implementierungen arbeiten jedoch im Arbeitsspeicher und können nicht zum zuverlässigen Speichern von Daten verwendet werden (Daten bleiben nach einem Stromausfall erhalten, zumindest nach einem programmierten). Und SQL-Implementierungen können mit Terabytes an Daten umgehen.

Natürlich schreibt ein DBMS nicht sofort (aber später) auf die Festplatte. Aber die Prolog-Interpreten, von denen ich gehört habe, schreiben niemals (implizit) ihre Fakten- und Regelgrundlagen, um sie auf der Festplatte zu belassen.

(Einige Sprachimplementierungen haben Persistenzfähigkeiten, z. B. SBCL mit save-lisp-and-die..., aber ich kenne keinen Prolog, der das tut).

Pragmatisch gesehen ist SQL für Datenbanken gedacht - auf Datenträgern -, aber Prolog ist eine Programmiersprache (für Quellcode in Textdateien).

Basile Starynkevitch
quelle
1
Ich glaube nicht, da keine SQL-Datenbank ausschließlich mit Datenträger-E / A arbeitet, da dies sehr ineffizient wäre (es befinden sich immer einige Daten im Speicher) und die Serialisierung von Prologeinschränkungen auf dem Datenträger technisch nicht behindert wird kann im Moment denken.
Idobie
3
Theoretisch ist SQL eine Abfragesprache und kümmert sich nicht darum, wie Daten gespeichert werden, solange die Daten durch ein relationales Modell beschrieben werden. SQL ist nur eine Schnittstelle, kein Paradigma. Es gibt SQL-Datenbanken, die nur oder teilweise im nicht persistenten Speicher arbeiten. Es wäre sogar möglich, dass eine SQL-Datenbank Daten in Form von Prolog-Fakten speichert! [Zitieren benötigt] Tatsachen beschreiben schließlich nur Beziehungen. Umgekehrt wäre es wahrscheinlich möglich, dass eine Prolog-Engine Fakten datenbankähnlich auf der Festplatte speichert, anstatt alles in den Speicher zu laden.
amon
1
Theoretisch ja, aber praktisch wird SQL auf der Festplatte gespeichert, und das ist häufig von entscheidender Bedeutung
Basile Starynkevitch
1
@BasileStarynkevitch Rules & Facts werden auf den Quellcode geschrieben, der auf der Festplatte erhalten bleibt. Warum sollten Sie sie stattdessen in der Datenbank speichern? Was meinst du mit Prolog kann die Daten nicht behalten? Das soll es nicht. Deshalb gibt es Datenbanken. Könnten Sie bitte näher darauf eingehen?
53777A
1
Genau, SQL ist für Datenbanken und Prolog ist eine Programmiersprache. Das ist mein Punkt.
Basile Starynkevitch
1

Ein Aspekt, der bisher nicht erwähnt wurde, ist der Drang nach "offenen" Systemen in den 1980er und 1990er Jahren. An vielen Orten müssten Softwareanbieter einen branchenüblichen Zugriff auf die Daten in ihren Datenbanken bereitstellen. Zu dieser Zeit war SQL ein etablierter Standard, der gut bekannt und verstanden war. Prolog war ziemlich esoterisch und akademisch. Als Sie anfingen, Schnittstellen wie ODBC für die einfache Verbindung von Systemen zu entwickeln, war niemand mehr daran interessiert, andere Technologien in Betracht zu ziehen.

Ich habe Ende der 80er Jahre an einem Ort gearbeitet, an dem eine recht erfolgreiche ISAM-Datenbank vorhanden war, die aufgrund von Marktdruck / Beschaffungsvorschriften gezwungen war, eine SQL-Schnittstelle hinzuzufügen.

Dave
quelle