Logische Programmierung (Logic Programming) ist ein Programmierparadigma, bei dem ein Programm aus Fakten und Regeln besteht und die Ausführung ein automatisches Schlussfolgern ist. Statt Befehle abzuarbeiten, beschreibt man Wissen und lässt das System daraus Antworten ableiten – die klassische Umsetzung ist Prolog („Programmation en Logique“, Alain Colmerauer und Robert Kowalski, 1972). Zusammen mit der funktionalen Programmierung ist sie die wichtigste Variante der deklarativen Programmierung.
Fakten, Regeln, Anfragen
Ein Prolog-Programm ist eine Wissensbasis aus Horn-Klauseln:
- Fakten – unbedingt wahre Aussagen:
eltern(anna, ben). - Regeln – Aussagen mit Bedingungen:
grosseltern(X, Z) :- eltern(X, Y), eltern(Y, Z).(„X ist Großelternteil von Z, wenn X Elternteil von Y und Y Elternteil von Z ist“). - Anfragen – Ziele, die das System zu beweisen versucht:
?- grosseltern(anna, Z).
Die Ausführung sucht mit Resolution und Unifikation nach einer Belegung der Variablen, die alle Bedingungen erfüllt – bei mehreren Möglichkeiten liefert die eingebaute Backtracking-Suche nach und nach alle Lösungen.
Anwendungen
Logische Programmierung glänzt dort, wo Wissen und Regeln im Vordergrund stehen: Expertensysteme, automatische Beweiser, Sprachverarbeitung (DCG-Grammatiken), Wissensrepräsentation und – über Constraint-Erweiterungen wie CLP(FD) – auch Optimierungsprobleme. Sie ist eng mit der Constraint-Programmierung verwandt: Deren Solver gehen auf dieselben logischen Grundlagen (Resolution, Unifikation, Suche) zurück.
Grenzen
Reine Logikprogrammierung ist für rechenintensive, zustandsorientierte Aufgaben weniger geeignet; Prolog ergänzt sie deshalb um Ein-/Ausgabe und Seiteneffekte. Die Reihenfolge der Klauseln beeinflusst außerdem die Suche – reine Deklarativität ist in der Praxis nicht ganz erreicht.
Verwandte Grundlagen: Deklarative Programmierung, Constraint-Programmierung, Unifikation, Backtracking, Prolog-Befehle, Aussagenlogik.