n 1. Grundkonzepte der logischen Programmierung n 2. Syntax von Prolog n 3. Rechnen in Prolog IV.1 Grundkonzepte der logischen Programmierung - 1 - Übersicht Imperative Sprachen l Folge von nacheinander ausgeführten Anweisungen n Prozedurale Sprachen l Variablen, Zuweisungen, Kontrollstrukturen n Objektorientierte Sprachen l Objekte und Klassen l ADT und Vererbung Deklarative Sprachen l Spezifikation dessen, was berechnet werden soll l Compiler legt fest, wie Berechnung verläuft n Funktionale Sprachen l keine Seiteneffekte l Rekursion n Logische Sprachen l Regeln zur Definition von Relationen IV.1 Grundkonzepte der logischen Programmierung - 2 - Wichtige Programmiersprachen 1950 Fortran 1960 Cobol Algol 60 PL/1 1970 Lisp Simula Algol 68 Pascal Smalltalk C 1980 Scheme Prolog ML Ada C++ Eiffel Modula-3 1990 Ada-95 Miranda Java 2000 Python Haskell Scala prozedural objektorientiert funktional logisch I.2. Grundlagen von Programmiersprachen - 3 - Fakten und Anfragen werner karin monika klaus gerd renate susanne dominique peter aline Programm: weiblich(monika). weiblich(karin). weiblich(renate). weiblich(susanne). weiblich(aline). maennlich(werner). maennlich(klaus). maennlich(gerd). maennlich(peter). maennlich(dominique). verheiratet(werner, monika). verheiratet(gerd, renate). verheiratet(klaus, susanne). mutterVon(monika, karin). mutterVon(monika, klaus). mutterVon(renate, susanne). mutterVon(renate, peter). mutterVon(susanne, aline). mutterVon(susanne, dominique). mensch(X). ?- maennlich(gerd). ?- verheiratet(gerd, monika). true false ?- mensch(gerd). true IV.1 Grundkonzepte der logischen Programmierung - 4 - Variablen in Anfragen werner karin monika klaus Programm: gerd renate susanne dominique peter aline weiblich(monika). ... weiblich(aline). maennlich(werner). ... maennlich(dominique). verheiratet(werner, monika). ... verheiratet(klaus, susanne). mutterVon(monika, karin). ... mutterVon(susanne, dominique). ?- mutterVon(X, susanne). X = renate ?- mutterVon(renate, Y). Y = susanne ; Y = peter IV.1 Grundkonzepte der logischen Programmierung - 5 - Kombination von Fragen werner karin monika klaus Programm: gerd renate susanne dominique peter aline weiblich(monika). ... weiblich(aline). maennlich(werner). ... maennlich(dominique). verheiratet(werner, monika). ... verheiratet(klaus, susanne). mutterVon(monika, karin). ... mutterVon(susanne, dominique). ?- verheiratet(gerd,F), mutterVon(F,susanne). F = renate ?- mutterVon(Oma,Mama), mutterVon(Mama,aline). Oma = renate Mama = susanne IV.1 Grundkonzepte der logischen Programmierung - 6 - Regeln werner karin monika klaus gerd renate susanne dominique Programm: peter aline weiblich(monika). ... weiblich(aline). maennlich(werner). ... maennlich(dominique). verheiratet(werner, monika). ... verheiratet(klaus, susanne). mutterVon(monika, karin). ... mutterVon(susanne, dominique). vaterVon(V,K) :- verheiratet(V,F), mutterVon(F,K). ?- vaterVon(gerd, susanne). true ?- vaterVon(gerd, Y). Y = susanne ; Y = peter IV.1 Grundkonzepte der logischen Programmierung - 7 - Mehrere Regeln für ein Prädikat werner monika karin gerd renate susanne klaus dominique Programm: peter aline weiblich(monika). ... weiblich(aline). maennlich(werner). ... maennlich(dominique). verheiratet(werner, monika). ... verheiratet(klaus, susanne). mutterVon(monika, karin). ... mutterVon(susanne, dominique). vaterVon(V,K) :- verheiratet(V,F), mutterVon(F,K). elternteil(X, Y) elternteil(X, Y) :- mutterVon(X,Y). :- vaterVon(X,Y). ?- elternteil(X, susanne). X = renate ; X = gerd IV.1 Grundkonzepte der logischen Programmierung - 8 - Rekursive Regeln werner karin monika peter dominique weiblich(monika). ... verheiratet(klaus, susanne). elternteil(X, Y) elternteil(X, Y) renate susanne klaus Programm: vaterVon(V,K) gerd aline maennlich(werner). ... mutterVon(susanne, dominique). :- verheiratet(V,F), mutterVon(F,K). :- mutterVon(X,Y). :- vaterVon(X,Y). vorfahre(V,X) :- elternteil(V,X). vorfahre(V,X) :- elternteil(V,Y), vorfahre(Y,X). ?- vorfahre(X, aline). X = susanne ; X = monika ; X = klaus ; X = renate ; X = werner ; X = gerd IV.1 Grundkonzepte der logischen Programmierung - 9 - Kennzeichen logischer Programme n Programme = Fakten und Regeln n Keine Kontrollstrukturen n Ein- und Ausgabevariablen liegen nicht fest n Besonders gut geeignet für Künstliche Intelligenz (z.B. Expertensysteme, deduktive Datenbanken) IV.1 Grundkonzepte der logischen Programmierung - 10 -