Frage

Mit der Logikprogrammierung meine ich die ein Unter Paradigma der deklarativen Programmiersprachen. Verpassen Sie nicht diese Frage verwechseln mit "Welche Probleme können Sie lösen mit if-then-else?"

Eine Sprache wie Prolog ist sehr faszinierend, und es lohnt sich zum Wohle des Lernens zu lernen, aber ich muss mich fragen, welche Klasse von Problemen der realen Welt ist am besten zum Ausdruck gebracht und durch eine solche Sprache gelöst. Gibt es bessere Sprachen? Existiert Logikprogrammierung durch eine anderen Namen in trendigen Programmiersprachen? Ist die zynische Version der Antwort eine Variante der Python Paradox ?

War es hilfreich?

Lösung

Prototyping .

Prolog ist dynamisch und ist seit 50 Jahren. Der Compiler ist liberal, die Syntax minimalistisch, und „Sachen machen“ ist einfach, macht Spaß und effizient. SWI-Prolog verfügt über einen integrierten in Tracer (Debugger!) und sogar eine grafische Tracer . Sie können den Code on the fly ändern, make/0 verwenden, können Sie dynamisch Module laden, ein paar Zeilen Code hinzufügen, ohne den Dolmetscher zu verlassen, oder bearbeiten Sie die Datei Sie gerade im Fluge mit edit(1) läuft. Glauben Sie, Sie haben ein Problem mit dem foobar/2 Prädikat gefunden?

?- edit(foobar).

Und sobald Sie den Editor verlassen, ist das Ding geht neu kompiliert werden. Sicher, Eklipse macht das gleiche für Java, aber Java ist nicht gerade eine Prototyping-Sprache.

Neben den reinen Prototyping Sachen, Prolog ist unglaublich gut geeignet für ein Stück Logik in Code übersetzen . So, automatische Prüfer und diese Art von Sachen können leicht in Prolog geschrieben werden.

Die ersten Erlang-Interpreter in Prolog geschrieben wurden - und aus einem Grunde, da Prolog ist sehr gut geeignet für das Parsen und Codieren der Logik, die Sie in Parse-Bäumen finden . In der Tat kommt Prolog mit einem eingebauten Parser! Nein, nicht eine Bibliothek, es ist in der Syntax, nämlich DCG s .

Prolog verwendet eine Menge in NLP, vor allem in der Syntax und Semantik Computational .

Aber, wird zu wenig genutzt Prolog und underappreciated. Leider scheint es eine akademische oder „unbrauchbar für eine wirkliche Zweck“ Stigma zu tragen. Aber es kann in vielen realen Anwendungen zu sehr gut genutzt werden, die die Fakten und die Berechnung von Beziehungen zwischen Fakten. Es ist nicht sehr gut geeignet für die Zahl Knirschen, aber CS ist nicht nur über Zahlknirschens.

Andere Tipps

Da Prolog = syntaktische Unification + Rückwärtsverkettung + REPL ,

die meisten Orte, an denen syntaktische Einheit verwendet wird, ist auch eine gute Verwendung für Prolog.

  

Die syntaktische Einheit verwendet

     
      
  • AST-Transformationen
  •   
  • Typinferenz
  •   
  • Begriff Umschreiben
  •   
  • Theorembeweisen
  •   
  • Die Verarbeitung natürlicher Sprache
  •   
  • Mustervergleich
  •   
  • Combinatorial Testfallgenerierung
  •   
  • Extrahieren Unterstrukturen von strukturierten Daten, wie ein XML-Dokument
  •   
  • Symbolic Computation heißt Kalkül
  •   
  • deduktive Datenbanken
  •   
  • Expertensysteme
  •   
  • Künstliche Intelligenz
  •   
  • Parsing
  •   
  • Abfragesprachen
  •   

Constraint Logic Programming (CLP)

Viele sehr gut und gut geeignet Anwendungsfälle von Logikprogrammierung sind bereits erwähnt worden. Ich mag die bestehende Liste mit mehreren Aufgaben von einem äußerst wichtigen Anwendungsgebiet der Logikprogrammierung ergänzen:

Logikprogrammierung fügt sich nahtlos weiter nahtlos als andere Paradigmen, mit Einschränkungen , in einem Rahmen resultierende namens Constraint Logic Programming .

Dies führt zu einem dedizierten Constraint-Solver für verschiedene Domains , wie zum Beispiel:

  • CLP (FD) für Zahlen
  • CLP (B) für Boolesche Werte
  • CLP (Q) für rational Zahlen
  • CLP (R) Gleitkomma- Zahlen.

Diese spezielle Einschränkung Solver führen zu mehreren wichtigen Anwendungsfälle von Logikprogrammierung, die nicht erwähnt Yeen worden sind, zeigen, von denen ich einige unten.

Wenn Sie ein Prolog-System entschieden hat, die Kraft und die Leistung seiner Constraint-Solver sind oft zu den entscheidenden Faktoren, vor allem für gewerblichen Anwender.

CLP (FD) - Reasoning über ganze Zahlen

In der Praxis CLP (FD) ist eine der imporant Anwendungen der Logikprogrammierung und wird verwendet, Aufgaben aus den folgenden Bereichen zu lösen, unter anderem:

  
      
  • Planung
  •   
  • Ressourcenzuweisung
  •   
  • Planung
  •   
  • kombinatorische Optimierung
  •   

Siehe weitere Informationen und einige Beispiele.

CLP (B) - Boolesche Constraints

CLP (B) wird häufig in Verbindung verwendet mit:

  
      
  • SAT Lösung
  •   
  • Schaltungsverifikation
  •   
  • kombiZählung
  •   

Siehe .

CLP (Q) - Rationale Zahlen

CLP (Q) verwendet wird, wichtige Klassen von Problemen zu lösen entstehen in Operations Research :

  
      
  • lineare Programmierung
  •   
  • integer lineare Programmierung
  •   
  • gemischt-ganzzahlige lineare Programmierung
  •   

Siehe .

Prolog ist ideal für nicht-numerische Probleme. Diese Artikel gibt einige Beispiele für einige Anwendungen von Prolog und es könnte Ihnen helfen, die Art der Probleme zu verstehen dass es vielleicht lösen.

Eines der Dinge, Prolog Sie kostenlos gibt, ist ein Rückzieher Suchalgorithmus -. Sie es selbst implementieren könnte, aber wenn Ihr Problem am besten durch gelöst, dass Algorithmus zur Verfügung zu haben, dann ist es schön, es zu benutzen

Die beiden Dinge, die ich es gut sein gesehen haben, ist mathematische Beweise und Verstehen natürlicher Sprache.

Prolog ist groß an dem Lösen von Rätseln und dergleichen. Das heißt, im Bereich der Rätsel lösen macht es leicht / mittel Rätsel lösen einfacher und komplizierte Rätsel zu lösen härter. Dennoch Schreiben Löser für das Netz Puzzles und dergleichen wie Hexiom, Sudoku oder Nurikabe ist nicht besonders schwierig.

Eine einfache Antwort ist „Build-Systeme“. Die verwendete Sprache Makefiles zu bauen (zumindest der Teil Abhängigkeiten zu beschreiben) ist im Wesentlichen eine logische Programmiersprache, die aber nicht wirklich eine „reine“ Logik Programmiersprache.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top