Reihenfolge von Klauseln
|
|
- Kristin Linden
- vor 6 Jahren
- Abrufe
Transkript
1 Reihenfolge von Klauseln Bei der Programmierung in Prolog steht grundsätzlich die Repräsentation logischer Zusammenhänge im Vordergrund. Nichtsdestotrotz ist es unvermeidbar, die Mechanismen der Abarbeitung in Prolog zu kennen und gegebenenfalls steuernd einzugreifen. Beispiel 4.7. Man betrachte die folgende Regel: listsum( [], 0 ). listsum( [H T], Summe ) :- listsum( T, Sum1 ), Summe is Sum1 + H. 222 Aus logischer Sicht ist die Reihenfolge der Klauseln listsum( T, Sum1 ) und Summe is Sum1 + H unerheblich. Für die Abarbeitung spielt die Reihenfolge dagegen eine Rolle. Betrachtet man listsum( [H T], Summe ) :- Summe is Sum1 + H, listsum( T, Sum1 ). so würde dies zu einem Fehler führen.?- listsum( [2,3,4], X ). ERROR: Arguments are not sufficiently instantiated Grund: Sum1 ist zum Zeitpunkt der Auswertung nicht mit einem Wert unifiziert (belegt). 223
2 Beispiel 4.8. fak(n, Fak ) :- N1 is N - 1, fak(n1, Fak1), Fak is Fak1 * N. fak(0,1). Eine kürzere Schreibweise ist nicht möglich, da in Verbindung mit der Unifikation keine Auswertung eines arithmetischen Ausdrucks stattfinden kann. Die Anfrage fak(7,x) führt zu einem Fehler. Prolog läuft in einen unendlichen Rekursionszyklus, weil die erste Regel immer wieder anwendbar ist. Grund: unvollständige Spezifikation 224 Abhilfe: Erweiterung der Regel fak(n, Fak ) :- integer(n), N > 0, N1 is N - 1, fak(n1, Fak1), Fak is Fak1 * N. fak(0,1). Mit dem Prädikat integer/1 wird geprüft, ob das Argument eine Integerzahl ist. So spielt auch die Reihenfolge der Regeln keine Rolle mehr. 225
3 Beispiel 4.9. Man betrachte die folgenden Varianten des Prädikats vorfahr/2. 1. vorfahr( X, Y ) :- elternteil( X, Y ). vorfahr( X, Y ) :- elternteil( X, Z ), vorfahr( Z, Y ). 2. vorfahr( X, Y ) :- elternteil( X, Y ). vorfahr( X, Y ) :- vorfahr( X, Z ), elternteil( Z, Y ). Stellt man eine Anfrage mit der zweiten Variante, so erhält man eine Fehlermeldung, falls die Vorfahrbeziehung nicht erfüllt ist:?- vorfahr2( lars, lars ). ERROR: Out of local stack Ursache: In der zweiten Variante wird permanent vorfahr( lars, Z ) Hierdurch kommt es zu einem Überlauf des Stacks. aufgerufen. 226 Probleme bei der Verwendung von Rekursion: Nicht-Termination Durch eine ungünstige Reihenfolge der Klauseln ensteht eine unendlicher Zyklus. Speicherprobleme Zur Vermeidung dieser Probleme sollte man nach Möglichkeit die folgenden Grundprinzipien beachten: Einfache Dinge zuerst! Hierdurch findet eine Filterung für die aufwendigen Berechnungen statt. Einsatz von Endrekursion Die rekursiven Aufrufe sollte als letzte Klausel des Regelrumpfs erfolgen. 227
4 Diese Dinge machen deutlich, daß auch in Prolog prozedurale Aspekte mit berücksichtigt werden müssen. Sonst führt dies zu Prolog-Programmen, die: logisch (deklarativ) korrekt aber prozedural inkorrekt sind. 228 Cut zur Kontrolle des Backtracking Prolog sucht mittels Backtracking bei der Abarbeitung nach Alternativen. Beispiel Einkommen: Gegeben seien die folgenden Prolog-Regeln zur Klassifikation von einkommen( X, gering ) :- X < einkommen( X, mittel ) :- X >= 1000, X =< einkommen( X, hoch ) :- X > Es wird die Anfrage gestellt:?- einkommen( 950, B ), B = hoch. 229
5 Es passiert folgendes: X wird mit 950 unifiziert, B mit gering. Der Regelrumpf X < 1000 ist erfüllt, das Anfrageliteral B = hoch nicht. Mittels Backtracking wird die zweite und dritte Regel ausprobiert. Es werden jeweils die Unifikationen durchgeführt und der Regelrumpf getestet. Der Regelrumpf ist nicht erfüllt. Ausgabe: No. Das Backtracking ist hier vollkommen unnötig, da für ein Einkommen nur genau eine Regel in Frage kommt. 230 Mit dem Cut (geschrieben!) wird Backtracking verhindert. Beispiel einkommen( X, gering ) :- X < 1000,!. einkommen( X, mittel ) :- X >= 1000, X =< 2000,!. einkommen( X, hoch ) :- X > Wird der Cut! überschritten, findet kein Backtracking mehr statt. Der Cut drückt hier folgendes aus: Diese Regel ist genau die richtige, es kommt keine andere in Frage. Dementsprechend würde die Anfrage des letzen Beispiels effizienter abgearbeitet. 231
6 Sei eine Klausel der folgenden Struktur gegeben: H :- B1,..., Bn,!, A1,..., Am. Sind B1,..., Bn erfüllt, so werden alle Alternativen, d.h. alle eventuell noch anwendbaren Regeln zum Beweis für B1,..., Bn und H abgeschnitten. Das Prolog-Prädikat für den Test, ob ein Element in einer Liste ent- Beispiel halten ist: memberchk( X, [X _] ) :-!. memberchk( X, [_ Y] ) :- memberchk( X, Y ). 232 Der Cut kann die Bedeutung eines logischen Programms verändern. p :- a,b. p :- c. Entspricht der Implikation a b c p p :- a,!,b. p :- c. Entspricht der Implikation a b a c p Ein Cut, der die Bedeutung eines Programms verändert, heißt roter Cut. Ein Cut, der die Bedeutung eines Programms nicht verändert, heißt grüner Cut. 233
7 Negation Bisher haben wir mit Prädikaten immer positive Sachverhalte ausgedrückt: Ist Elternteil von, ist Vorfahr von, etc. Es kann aber auch notwendig sein, einen negativen Sachverhalt auszudrücken, d.h. etwas gilt nicht: Hat keine Kinder, etc. Beispiel Man möchte für das Verwandte-Beispiel ein Prädikat für die Kinderlosigkeit definieren: kinderlos( X ) :- elternteil( X, _ ),!, fail. kinderlos( X ). 234 Beispiel Berechnung der Primzahlen bis 100: ziffer(z) :- member(z, [0,1,2,3,4,5,6,7,8,9]). zahl(zahl) :- ziffer(z), ziffer(e), Zahl is 10 * Z + E. keineprimzahl(z) :- zahl(t), echterteiler(t, Z). echterteiler(t,z) :- T > 1, T < Z, 0 is Z mod T. primzahl(z) :- keineprimzahl(z),!,fail. primzahl(z) :- Z > 1. Anfrage:?- zahl( X ), primzahl( X ). X = 2 ; X = 3 ;
8 fail/0 ist ein vordefiniertes Prädikat, das nie erfüllt ist. Hierdurch wird Backtracking erzwungen. Ist elternteil( X, _ ) erfüllt, so unterdrückt der Cut aber das Backtracking und bewirkt das Abschneiden der zweiten Regel. Dieses Prinzip wird in Prolog allgemein für die Negation benutzt. Die Negation eines Prädikats Ziel entpricht prinzipiell folgenden Regeln: not( Ziel ) :- Ziel,!, fail. not( Ziel ). Solch ein Prädikat not/1 ist in Prolog enthalten. Das Argument von not/1 ist eine Formel und kein Term! 236 Beispiel 4.15.?- not( vater( theo, peter ) ). Yes?- not( vater( peter, lars ) ). No?- not( vater( peter, X ) ). No Die letzte Anfrage hat die Bedeutung: Ist Peter kein Vater? X V ater(peter, X) Sie hat nicht die Bedeutung: Für welche X gilt, daß Peter nicht der Vater von X ist. X V ater(peter, X) 237
9 Man bezeichnet dieses Prinzip der Negation als Negation as failure. Eine negierte Anfrage in Prolog ist wahr, wenn die Anfrage nicht bewiesen werden kann. Man beachte, daß not/1 keine Variablenbelegung liefert. Es entspricht somit nicht der logischen Negation im Sinne der Negation eines Prädikats. not/1 sollte nur verwendet werden, wenn in dem negierten Prädikat keine ungebundenen Variablen mehr auftauchen. Die Kurzschreibweise für not ist \ Beispiel Das Beispiel für die Berechnung der Primzahlen mit direkter Verwendung von not/1 bzw. \+. ziffer(z) :- member(z, [0,1,2,3,4,5,6,7,8,9]). zahl(zahl) :- ziffer(z), ziffer(e), Zahl is 10 * Z + E. keineprimzahl(z) :- zahl(t), echterteiler(t, Z). echterteiler(t,z) :- T > 1, T < Z, 0 is Z mod T. primzahl(z) :- Z > 1, \+ keineprimzahl(z). 239
10 Programmiertechniken in Prolog Wir betrachten zunächst die Verarbeitung von Listen. Test auf Exsistenz: Wir wollen prüfen, ob eine Kollektion von Objekten mindestens ein Objekt enthält, das eine gewisse Eigenschaft hat. existence_test( Info, [H T] ) :- has_property( Info, H ). existence_test( Info, [H T] ) :- existence_test( Info, T ). Info steht hierbei für eine beliebige Anzahl an Argumenten, die benötigt werden, um die gewünschte Eigenschaft zu prüfen. Beispiel Wir möchten prüfen, ob eine Liste mindestens eine weitere Liste als Element enthält. 240 Test für alle Listenelemente: Wir wollen prüfen, ob alle Elemente einer Liste eine Eigenschaft haben (erfüllen). forall_test( Info, [] ). forall_test( Info, [H T] ) :- has_property( Info, H ), forall_test( Info, T ). Beispiel Wir möchten prüfen, ob alle Elemente einer Liste Ziffern sind. 241
11 Rückgabe eines Resultatswertes (1): Die vorangegangenen Prädikate lieferten kein Resultat. In Prolog kann ein Resultat nur über eine freie Variable, die an ein Prädikat übergeben wird, geliefert werden. Wir wollen eine Resultat liefern, sobald ein Listenelement eine gewisse Eigenschaft hat. return_if_property( Info, [H T], Result ) :- has_property( Info, H ), result( Info, H, T, Result ). return_if_property( Info, [H T], Result ) :- return_if_property( Info, T, Result ). Beispiel Ein Prädikat soll zu einer Liste die Subliste ab einem Element mit dem Wert X liefern. 242 Rückgabe eines Resultatswertes (2): Wir wollen ein Resultat nach der Verarbeitung aller Listenelemete liefern. process_all( Info, [H1 T1], Result ) :- process_one( Info, H1, H2 ), process_all( Info, T1, T2 ), Result = [H2 T2]. Beispiel Wir wollen zu einer Liste von Zahlen eine Liste der Quadrate diese Zahlen bestimmen. 243
12 Allgemeine Programmierschemata in Prolog Generate and Test: Backtracking wird genutzt, um mögliche Lösungen zu erzeugen Anschließend wird die mögliche Lösung getestet. Erfüllt die mögliche Lösung nicht die Bedingungen für eine Lösung wird durch Backtracking eine neue Lösung generiert. generate_and_test( Info, X ) :-... generate( Info, X ), test( Info, X ), Ein Generator zur Implementierung des Prädikats generate kann endlich oder unendlich sein. Ein endlicher Generator wurde in dem Primzahlbeispiel verwendet: ziffer(z) :- member(z, [0,1,2,3,4,5,6,7,8,9]). zahl(zahl) :- ziffer(z), ziffer(e), Zahl is 10 * Z + E. Er liefert durch Backtracking nur endlich viele Werte. Ein unendlicher Generator für natürliche Zahlen könnte so aussehen: int( 1 ). int( N ) :- int( N1 ), N is N Problem: Durch das Backtracking bricht der Prozeß der Generierung niemals ab. 245
13 Dies ist aber kein Problem, wenn man nur eine Lösung haben möchte. Man unterdrückt das Backtrackig dann mit dem Cut: generate_and_test( Info, X ) :-... generate( Info, X ), test( Info, X ),!,... Beispiel Berechnung des KGV verschiedener Zahlen. 246 Failure-Driven Loop: Manchmal möchte man Prädikate definieren, die gewisse Dinge tun, wobei das Prädikat aber immer erfüllt sein soll. Beispiel: Gebe alle elternteil-beziehungen aus. Im Vordergund stehen hier die Seiteneffekte (z.b. die Ausgabe). Vorsicht: Dies ist eine sehr prozedural orientierte Programmiertechnik! failure_driven_loop( Info ) :- generate( Info, Term ), side_effect( Term ), fail. failure_driven_loop( Info ). Beispiel Ausgabe aller elternteil-beziehungen. 247
14 Wichtige Prolog-Prädikate true/0 ist immer wahr. repeat/0 zur Programmierung von Iterationen Dieses Prädikat entspricht der Definition: repeat. repeat:- repeat. call/1 ruft den Interpreter des Prolog-Systems auf. Das Argument von call ist kein Term sondern eine Prolog-Zielklausel. nl/0 schreibt ein Newline auf die Standardausgabe. write/1 schreibt das Argument auf die Standardausgabe. read/1 liest ein Argument von der Standardeingabe und führt dabei eine Unifikation durch. 248 assert/1 fügt eine Klausel dem Prolog-Programm hinzu. Die Varianten asserta/1 bzw. assertz/1 fügen die Klausel am Anfang bzw. Ende des Prolog-Programms ein. retract/1 entfernt eine Klausel aus dem Prolog-Programm. 249
Auswahl von Klauseln und Atomen in Prolog
5.6 Prolog... ist die bekannteste Implementierung einer LP-Sprache; wurde Anfang der 1970er von Alain Colmerauer (Marseille) und Robert Kowalski (Edinburgh) entwickelt. konkretisiert den vorgestellten
MehrFragen zum Nachdenken: Wie könnte man das Fehlen eines Attribut-Wertes interpretieren?
Attribut-Werte-Paare Eine Eigenschaft kann beschrieben werden durch ein Paar [a,w]. Dabei bezeichnet a das Attribut und w den konkreten Wert aus dem Wertebereich W a des Attributs. Die Eigenschaften eines
MehrLogische Programmierung
Logische Programmierung B-82 Deklaratives Programmieren in Prädikatenlogik: Problem beschreiben statt Algorithmus implementieren (idealisiert). Grundlagen: Relationen bzw. Prädikate (statt Funktionen);
MehrAlgorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration
Algorithmen & Programmierung Steuerstrukturen im Detail Selektion und Iteration Selektion Selektion Vollständige einfache Selektion Wir kennen schon eine Möglichkeit, Selektionen in C zu formulieren: if
MehrKontrolle. bersicht. Ziel. Alle Lšsungen fÿr ein Ziel erhalten. Negation Disjunktion SuchbŠume stutzen: Cut
Kontrolle bersicht Ziel Alle Lšsungen fÿr ein Ziel erhalten Semikolon, Failure-Driven Loop, findall/3 Negation Disjunktion SuchbŠume stutzen: Cut Kennen dieser Programmiertechniken In der Lage sein, den
MehrLogik-Grundlagen. Syntax der Prädikatenlogik
Logik-Grundlagen X 1 :...: X k : ( A 1 A 2... A m B 1 B 2... B n ) Logische und funktionale Programmierung - Universität Potsdam - M. Thomas - Prädikatenlogik III.1 Syntax der Prädikatenlogik Prädikat:
MehrSpeicher und Adressraum
Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode
MehrEinführung in das Programmieren Prolog Sommersemester 2006. Teil 2: Arithmetik. Version 1.0
Einführung in das Programmieren Prolog Sommersemester 2006 Teil 2: Arithmetik Version 1.0 Gliederung der LV Teil 1: Ein motivierendes Beispiel Teil 2: Einführung und Grundkonzepte Syntax, Regeln, Unifikation,
MehrProlog 5. Kapitel: Arithmetik
Zusammenfassung Kapitel 4 Prolog 5. Kapitel: Arithmetik Dozentin: Wiebke Petersen Kursgrundlage: Learn Prolog Now (Blackburn, Bos, Striegnitz) Wir haben Listen als mächtige Datenstrukturen in Prolog kennengelernt
MehrÜbungen zu Kognitive Systeme I
Übungen zu Kognitive Systeme I Kognitive Systeme / WIAI / Uni Bamberg 26. Oktober 2005 Inhalt 1 2 3 Listen und Mengen Input & Output Sonstiges 4 5 Die werden als Bonuspunkte auf die Klausur angerechnet.
MehrEinführung in PROLOG. Christian Stocker
Einführung in PROLOG Christian Stocker Inhalt Was ist PROLOG? Der PROLOG- Interpreter Welcher Interpreter? SWI-Prolog Syntax Einführung Fakten, Regeln, Anfragen Operatoren Rekursion Listen Cut Funktionsweise
MehrProgrammierkurs Python I
Programmierkurs Python I Michaela Regneri & Stefan Thater Universität des Saarlandes FR 4.7 Allgemeine Linguistik (Computerlinguistik) Winter 2010/11 Übersicht Kurze Wiederholung: while Sammeltypen (kurz
MehrKopf und Rest einer Liste (head and tail): Trennung durch. Listenkopf: kann mehrere Elemente umfassen
Prolog Syntax Liste, Variable [ Term Liste ] Listenelemente: Trennung durch Komma [1, pferd, klaus] Kopf und Rest einer Liste (head and tail): Trennung durch [K R] = [1, pferd, klaus] (K = 1, R = [pferd,
MehrFakten, Regeln und Anfragen
Fakten, Regeln und Anfragen Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de 18.10.99 GK Prolog - Fakten, Regeln und Anfragen 1 Programmieren = Problemlösen Prolog ist eine deklarative
MehrC.3 Funktionen und Prozeduren
C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens
MehrAlgorithmen & Programmierung. Rekursive Funktionen (1)
Algorithmen & Programmierung Rekursive Funktionen (1) Berechnung der Fakultät Fakultät Die Fakultät N! einer nichtnegativen ganzen Zahl N kann folgendermaßen definiert werden: d.h. zur Berechnung werden
MehrProgrammiersprachen 2 (SS 2013)
n Advanced 2 1. Juli 2013 Beispielprogramm pq(x,y) :- p(x,z), q(z,y). p(a,b). p(b,c). p(c,a). 2 q(a,a). q(b,d). Logisch gesehen Die Reihenfolge verändert nicht die logische Aussage p(x,z), q(z,y) äquivalent
Mehr5 Logische Programmierung
5 Logische Programmierung Logik wird als Programmiersprache benutzt Der logische Ansatz zu Programmierung ist (sowie der funktionale) deklarativ; Programme können mit Hilfe zweier abstrakten, maschinen-unabhängigen
MehrWas ist Logische Programmierung?
Was ist Logische Programmierung? Die Bedeutung eines Computer-Programms kann durch Logik erklärt werden. Die Idee der logischen Programmierung besteht darin, die Logik eines Programms selber als Programm
MehrHaskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell
Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Milners
MehrProlog by example. Carsten Rösnick
Prolog by example Carsten Rösnick Was ist Prolog? Programmation en Logique (1970er) Nutzer erstellt Datenbasis Definiert, was gilt in seinem Universum Closed-world assumption Inferenz Grundlagen (1) Ein
MehrPROLOG. Tutorium zur Vorlesung Datenbanken und Wissensrepräsentation (Prof. Dr. G. Büchel)
PROLOG Tutorium zur Vorlesung Datenbanken und Wissensrepräsentation (Prof. Dr. G. Büchel) Stand: April 2010 Verfasser: Dipl.-Ing. (FH) Andreas W. Lockermann Vorwort Der Name PROLOG leitet sich aus den
MehrSS2010 BAI2-LBP Gruppe 1 Team 07 Entwurf zu Aufgabe 4. R. C. Ladiges, D. Fast 10. Juni 2010
SS2010 BAI2-LBP Gruppe 1 Team 07 Entwurf zu Aufgabe 4 R. C. Ladiges, D. Fast 10. Juni 2010 Inhaltsverzeichnis 4 Aufgabe 4 3 4.1 Sich mit dem Programmpaket vertraut machen.................... 3 4.1.1 Aufgabenstellung.................................
MehrII.3.1 Rekursive Algorithmen - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.3.1 Rekursive Algorithmen -
MehrListen. bersicht. Zweck. Listen allgemein Listen in Prolog. Programmiertechniken mit Listen. Erstellen von Prolog-Programmen mit Listen
Listen bersicht Listen allgemein Listen in Prolog Schreibweise Listen als rekursive Datenstruktur Unifikation Programmiertechniken mit Listen Zweck rekursive Suche Abbilden Erstellen von Prolog-Programmen
MehrLogische und funktionale Programmierung
Logische und funktionale Programmierung Vorlesung 2: Prädikatenkalkül erster Stufe Babeş-Bolyai Universität, Department für Informatik, Cluj-Napoca csacarea@cs.ubbcluj.ro 14. Oktober 2016 1/38 DIE INTERPRETATION
MehrBinäre Suchbäume (binary search trees, kurz: bst)
Binäre Suchbäume (binary search trees, kurz: bst) Datenstruktur zum Speichern einer endlichen Menge M von Zahlen. Genauer: Binärbaum T mit n := M Knoten Jeder Knoten v von T ist mit einer Zahl m v M markiert.
Mehr6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
MehrVerkettete Datenstrukturen: Bäume
Verkettete Datenstrukturen: Bäume 1 Graphen Gerichteter Graph: Menge von Knoten (= Elementen) + Menge von Kanten. Kante: Verbindung zwischen zwei Knoten k 1 k 2 = Paar von Knoten (k 1, k 2 ). Menge aller
MehrNormalformen der Prädikatenlogik
Normalformen der Prädikatenlogik prädikatenlogische Ausdrücke können in äquivalente Ausdrücke umgeformt werden Beispiel "X (mensch(x) Æ sterblich(x)) "X (ÿ mensch(x) sterblich(x)) "X (ÿ (mensch(x) Ÿ ÿ
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrGrundlagen der Theoretischen Informatik
FH Wedel Prof. Dr. Sebastian Iwanowski GTI22 Folie 1 Grundlagen der Theoretischen Informatik Sebastian Iwanowski FH Wedel Kap. 2: Logik, Teil 2.2: Prädikatenlogik FH Wedel Prof. Dr. Sebastian Iwanowski
MehrWissensrepräsentation und -verarbeitung in Logiken. bereinigt Pränex Skolem ( -Eliminierung) Klausel (Menge von Klauseln, Notation ohne Quantoren)
Was bisher geschah Wissensrepräsentation und -verarbeitung in Logiken klassische Aussagenlogik klassische Prädikatenlogik: Wiederholung Syntax, Semantik Normalformen: bereinigt Pränex Skolem ( -Eliminierung)
MehrGliederung. Programmierparadigmen. Einführung in Prolog: Einführung in Prolog: Programmieren in Prolog. Einführung Syntax Regeln Listen Relationen
Gliederung Programmierparadigmen Programmieren in Prolog D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Sommer 2011, 26. April
MehrEinführung in Prolog. Literatur
Einführung in Prolog Literatur Clocksin/Mellish Programming in Prolog Skript aus dem Kurs Max Hadersbeck Skript aus dem Kurs Hans Leiss Bratko Prolog Programming for Artificial Intelligence Prolog Lexikon
MehrProlog basiert auf Prädikatenlogik
Software-Technologie Software-Systeme sind sehr komplex. Im Idealfall erfolgt die Programmierung problemorientiert, während die notwendige Übertragung in ausführbare Programme automatisch erfolgt. Prolog-Philosophie:
MehrPrädikate zum Testen und Manipulieren der Struktur der Terme; Mehr meta-logische Prädikate z.b. zum Testen des Zustands der Ableitung;
Mehr Prolog Prolog bietet mehr an, z.b.: Prädikate zum Testen und Manipulieren der Struktur der Terme; Mehr meta-logische Prädikate z.b. zum Testen des Zustands der Ableitung; Mehr extra-logische Prädikate,
MehrEinführung in PROLOG IV Listen
Einführung in PROLOG IV Listen Beispiele für Listen in PROLOG: 1. [mia, vincent, jules, yolanda] 2. [mia, robber(honey_bunny), X, 2, mia] 3. [] 4. [mia, [vincent, jules], [butch, girlfriend(butch)]] 5.
Mehr1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren
1 und der Informatik I: Einführung in die Programmierung 5., bedingte Ausführung und Albert-Ludwigs-Universität Freiburg Bernhard Nebel 27. Oktober 2015 27. Oktober 2015 B. Nebel Info I 3 / 21 Der Vergleichsoperatoren
Mehrmathe plus Aussagenlogik Seite 1
mathe plus Aussagenlogik Seite 1 1 Aussagenlogik 1.1 Grundbegriffe Def 1 Aussage Eine Aussage ist ein beschriebener Sachverhalt, dem eindeutig einer der Wahrheitswerte entweder wahr oder falsch zugeordnet
MehrAlgorithmen & Programmierung. Ausdrücke & Operatoren (1)
Algorithmen & Programmierung Ausdrücke & Operatoren (1) Ausdrücke Was ist ein Ausdruck? Literal Variable Funktionsaufruf Ausdruck, der durch Anwendung eines einstelligen (unären) Operators auf einen Ausdruck
MehrÜbersicht Listen werden geführt für Listen Die wichtigste nicht-nummerische Datenstruktur Beliebige Länge Strikte Reihenfolge Wunschliste für Listen
n Einkaufslisten und Wortlisten Übersicht n Die wichtigste nicht-nummerische Datenstruktur beliebige Länge und fixe Reihenfolge n vs. n-stellige Terme Spezialnotation Klammerschreibweise nrest-strich n-unifikation
MehrFaktorisierungen und Teilbarkeiten natürlicher Zahlen. Teiler natürlicher Zahlen
Faktorisierungen und Teilbarkeiten natürlicher Zahlen Erinnerung: Eine natürliche Zahl heißt faktorisierbar, wenn sie als Produkt mit Faktoren geschrieben werden kann. Beispiel: 21= 1 21 oder 21= 3 7 Natürlich
Mehr= 7 (In Binärdarstellung: = 0111; Unterlauf) = -8 (In Binärdarstellung: = 1000; Überlauf)
Musterlösung Übung 2 Aufgabe 1: Große Zahlen Das Ergebnis ist nicht immer richtig. Die Maschine erzeugt bei Zahlen, die zu groß sind um sie darstellen zu können einen Über- bzw. einen Unterlauf. Beispiele
MehrUnterprogramme. Unterprogramme
Unterprogramme Unterprogramme wichtiges Hilfsmittel für mehrfach benötigte Programmabschnitte spielen in höheren Programmiersprachen eine wesentliche Rolle in Assembler sind bestimmte Konventionen nötig
MehrLogic in a Nutshell. Christian Liguda
Logic in a Nutshell Christian Liguda Quelle: Kastens, Uwe und Büning, Hans K., Modellierung: Grundlagen und formale Methoden, 2009, Carl Hanser Verlag Übersicht Logik - Allgemein Aussagenlogik Modellierung
MehrLogik und Beweise. Logik und Beweise. Vorsemesterkurs SoSe März 2016
Logik und Beweise Logik und Beweise Vorsemesterkurs SoSe16 Ronja Düffel 21. März 2016 Logik und Beweise Wozu Beweise in der Informatik?... um Aussagen wie 1 Das Programm erfüllt die gewünschte Aufgabe.
MehrProgrammierkurs Prolog, SS 1998
Programmierkurs Prolog SS 1998 Universität Dortmund LS VIII - Prof. K. Morik Inhalt Vergleiche von Termen Typtests auf Termen Zugriff auf den Termaufbau Zugriff auf Fakten und Regeln All-Solutions Prädikate
MehrProlog als Datenbanksprache - Idee
Prolog als Datenbanksprache - Idee student Mnr Vorname Name Semester student( 1000, Anna, Arm, ti2 ). student( 1001, ita, eich, ti2 ). student( 1002, Peter, eich, ti2 ). student( 1003, Peter, Petersen,
MehrSWP Prüfungsvorbereitung
20. Juni 2011 1 Grammatiken 2 LL(1) 3 EXP 4 Datentypen 5 LP Grammatiken Angabe Erstellen Sie First- und Follow-Mengen aller Non-Terminale der folgenden Grammatik. S a S S B y B A C A A b b A x A ɛ C c
MehrNormalformen boolescher Funktionen
Normalformen boolescher Funktionen Jeder boolesche Ausdruck kann durch (äquivalente) Umformungen in gewisse Normalformen gebracht werden! Disjunktive Normalform (DNF) und Vollkonjunktion: Eine Vollkonjunktion
Mehr12 == 12 true 12 == 21 false 4 === 7 true 4 === "vier" false 4 === 4.0 false 12!= 13 true 12!== 12 false 12!== 12.0 true. 1 < 3 true 3 < 1 false
Die if-anweisung if (Bedingung 1) { Code 1 else { Code 2 ; Anm.1: Das ; kann entfallen, da innerhalb { ein sog. Codeblock geschrieben wird. Anm.2: Es gibt noch andere Schreibweisen, aber wir wollen uns
MehrFlussdiagramm / Programmablaufplan (PAP)
Flussdiagramm / Programmablaufplan (PAP) Basissysmbole Grenzstelle (Anfang, Zwischenhalt oder Ende des Programms/Algorithmus) Verbindung Zur Verdeutlichung der Ablaufrichtung werden Linien mit einer Pfeilspitze
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel
MehrProzeduren und Funktionen
OSZ Handel I - Gymnasiale Oberstufe (Abt. V) In Anlehnung an: Duden Informatik (3.Auflage, Dudenverlag, 2001, S. 477). Prozeduren und Funktionen Fach: Informatik Parameter sind Platzhalter in einer Prozedur
MehrDiskrete Strukturen Kapitel 2: Grundlagen (Beweise)
WS 2014/15 Diskrete Strukturen Kapitel 2: Grundlagen (Beweise) Hans-Joachim Bungartz Lehrstuhl für wissenschaftliches Rechnen Fakultät für Informatik Technische Universität München http://www5.in.tum.de/wiki/index.php/diskrete_strukturen_-_winter_14
MehrAussagenlogik zu wenig ausdrucksstark für die meisten Anwendungen. notwendig: Existenz- und Allaussagen
Prädikatenlogik 1. Stufe (kurz: PL1) Aussagenlogik zu wenig ausdrucksstark für die meisten Anwendungen notwendig: Existenz- und Allaussagen Beispiel: 54 Syntax der Prädikatenlogik erster Stufe (in der
MehrTU5 Aussagenlogik II
TU5 Aussagenlogik II Daniela Andrade daniela.andrade@tum.de 21.11.2016 1 / 21 Kleine Anmerkung Meine Folien basieren auf den DS Trainer von Carlos Camino, den ihr auf www.carlos-camino.de/ds findet ;)
MehrUnifikation (1) Allgemeines: Mechanismus zur Parameter-Übergabe. Zuweisung an Variablen (einmalig, symmetrisch). Pattern-Matching (Muster-Vergleich).
4. Prolog Ausführung 4-1 Unifikation (1) Allgemeines: Mechanismus zur Parameter-Übergabe. Zuweisung an Variablen (einmalig, symmetrisch). Pattern-Matching (Muster-Vergleich). Substitution: Abbildung von
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Große Übung #2 Phillip Keldenich, Arne Schmidt 10.11.2016 Organisatorisches Fragen? Checkliste: Anmeldung kleine Übungen Anmeldung Mailingliste Dies ersetzt nicht die Prüfungsanmeldung!
MehrVorkurs: Mathematik für Informatiker
Vorkurs: Mathematik für Informatiker Teil 3 Wintersemester 2016/17 Steven Köhler mathe@stevenkoehler.de mathe.stevenkoehler.de 2 c 2016 Steven Köhler Wintersemester 2016/17 Inhaltsverzeichnis Teil 1 Teil
MehrProgrammiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm
Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i
MehrÜbung KogInf Problemlösen, Suche, Lisp
Übung KogInf Problemlösen, Suche, Lisp Michael Siebers 5. und 12. November 2012 Zu Meiner Person Michael Siebers, Dipl. Psych., B.Sc. AI Raum: W05/05.045 Tel.: +49-951-863 2863 E-mail: michael.siebers@uni-bamberg.de
MehrProlog = Programmierung in Logik (Roussell, Colmerauer, 1973/74)
Logikprogrammierung Historie: Philosophie / Mathematik Künstliche Intelligenz Praktische Programmiersprache: Prolog = Programmierung in Logik (Roussell, Colmerauer, 1973/74) Grundidee: Ein Programm ist
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrFunktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung
Funktionale Programmierung 1 Funktionale Programmierung: Vorlesungsüberblick 1. Funktionale Programmierung Prinzipien funktionaler Programmierung Funktionale Programmierung in prozeduralen Sprachen Rekursive
MehrSQL. SQL SELECT Anweisung SQL-SELECT SQL-SELECT
SQL SQL SELECT Anweisung Mit der SQL SELECT-Anweisung werden Datenwerte aus einer oder mehreren Tabellen einer Datenbank ausgewählt. Das Ergebnis der Auswahl ist erneut eine Tabelle, die sich dynamisch
MehrJAVA - Methoden - Rekursion
Übungen Informatik I JAVA - Methoden - Rekursion http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 1 Methoden Methoden sind eine Zusammenfassung von Deklarationen und Anweisungen
MehrFunktionen in PHP 1/7
Funktionen in PHP 1/7 Vordefinierte Funktionen in PHP oder vom Entwickler geschriebene Funktionen bringen folgende Vorteile: gleiche Vorgänge müssen nur einmal beschrieben und können beliebig oft ausgeführt
MehrIn diesem Abschnitt betrachten wir nur quadratische Matrizen mit Komponenten aus einem Körper K, also A K n n für ein n N. Wenn (mit einem n > 1)
34 Determinanten In diesem Abschnitt betrachten wir nur quadratische Matrizen mit Komponenten aus einem Körper K, also A K n n für ein n N Wenn (mit einem n > 1) a 11 a 12 a 1n a 21 a 22 a 2n A =, (1)
MehrÜbungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.
Eine Anweisung wird mit dem Wertzuweisungsoperator = geschrieben. Eine Anweisung wird mit dem Wertzuweisungsoperator = geschrieben. Daher ist y = x + 5.6; keine Gleichung, sondern die Anweisung den Wert
MehrEinschub: Anweisungen und Bedingungen für PAP und Struktogramme (1)
Einschub: Anweisungen und Bedingungen für PAP und Struktogramme (1) Anweisungen: Eingabeanweisungen, z.b. Eingabe: x Ausgabeanweisungen, z.b. Ausgabe: Das Maximum ist, max Die Symbole x und max werden
MehrAllgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2008/09 Einführung in die Informatik 2 Klausur Prof. Dr. Helmut Seidl, T. M. Gawlitza, S. Pott,
MehrGroßübung zu Einführung in die Programmierung
Großübung zu Einführung in die Programmierung Daniel Bimschas, M.Sc. Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/bimschas Inhalt 1. Besprechung Übung 4 Iteration
MehrStapel (Stack, Keller)
Stapel (Stack, Keller) Eine wichtige Datenstruktur ist der Stapel. Das Prinzip, dass das zuletzt eingefügte Element als erstes wieder entfernt werden muss, bezeichnet man als LIFO-Prinzip (last-in, first-out).
MehrEinstieg in die Informatik mit Java
1 / 20 Einstieg in die Informatik mit Java Rekursion Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 20 1 Überblick 2 Rekursion 3 Rekursive Sortieralgorithmen 4 Backtracking
MehrMATHEMATIK FÜR WIRTSCHAFTSWISSENSCHAFTLER MUSTERLÖSUNG 3. TEST
Privatdozent Dr. C. Diem diem@math.uni-leipzig.de http://www.math.uni-leipzig.de/ diem/wiwi MATHEMATIK FÜR WIRTSCHAFTSWISSENSCHAFTLER MUSTERLÖSUNG 3. TEST Es folgt eine Musterlösung zusammen mit Anleitungen
MehrBinary Decision Diagrams (Einführung)
Binary Decision Diagrams (Einführung) Binary Decision Diagrams (BDDs) sind bestimmte Graphen, die als Datenstruktur für die kompakte Darstellung von booleschen Funktionen benutzt werden. BDDs wurden von
MehrSuchen. lineare Suche, binäre Suche, divide and conquer, rekursive und iterative Algorithmen, geordnete Daten, Comparable
Suchen lineare Suche, binäre Suche, divide and conquer, rekursive und iterative Algorithmen, geordnete Daten, Comparable Welche Nummer hat Herr Meier? Enthält Einträge (Elemente) der Form : Name, Vorname
MehrKurs 1612 Konzepte imperativer Programmierung Musterlösung zur Nachklausur am
1 Aufgabe 1 a) Da Effizienzbetrachtungen bei der Lösung der Aufgabe keine Rolle spielen, wählen wir einen einfachen, aber ineffizienten Algorithmus mit zwei ineinander verschachtelten for-schleifen. Dadiefor-Schleifen
MehrDonnerstag, 11. Dezember 03 Satz 2.2 Der Name Unterraum ist gerechtfertigt, denn jeder Unterraum U von V ist bzgl.
Unterräume und Lineare Hülle 59 3. Unterräume und Lineare Hülle Definition.1 Eine Teilmenge U eines R-Vektorraums V heißt von V, wenn gilt: Unterraum (U 1) 0 U. (U ) U + U U, d.h. x, y U x + y U. (U )
Mehr4.2 Selbstdefinierte Matlab-Funktionen 1. Teil
4.2 Selbstdefinierte Matlab-Funktionen 1. Teil 37 Ein m-file mit Namen Funktionsname.m und einer ersten Zeile der folgen Form: function Funktionsname(input1,input2,...,inputn) oder function output1=funktionsname(input1,input2,...,inputn)
MehrWeitere Beweistechniken und aussagenlogische Modellierung
Weitere Beweistechniken und aussagenlogische Modellierung Vorlesung Logik in der Informatik, HU Berlin 2. Übungsstunde Aussagenlogische Modellierung Die Mensa versucht ständig, ihr Angebot an die Wünsche
MehrEinführung in die Programmierung
: Inhalt Einführung in die Programmierung Wintersemester 2009/0 : Technik vs. Iteration Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund 2 Definition (einfache,
MehrProgrammieren lernen mit Groovy Rekursion Rekursion und Iteration
Programmieren lernen mit Groovy Rekursion Seite 1 Rekursion Rekursion Ursprung lat. recurrere ~ zurücklaufen rekursive Definition Definition mit Bezug auf sich selbst Beispiel Fakultätsfunktion n! 0! =
MehrVorlesung. Vollständige Induktion 1
WS 015/16 Vorlesung Vollständige Induktion 1 1 Einführung Bei der vollständigen Induktion handelt es sich um ein wichtiges mathematisches Beweisverfahren, mit dem man Aussagen, die für alle natürlichen
MehrDongle Generator: Technisches Datenblatt Betriebsanleitung Generieren Sie Ihren Dongle selbst!!! Allgemeine Angaben:
Dongle Generator: Technisches Datenblatt Betriebsanleitung Generieren Sie Ihren Dongle selbst!!! Allgemeine Angaben: Die Software Dongle-Generator macht aus jedem USB Stick einen Dongle. Dazu werden verschiedene
MehrSWP Logische Programme
SWP Logische Programme Alexander Felfernig, Stephan Gspandl Institut für Softwaretechnologie {alexander.felfernig,sgspandl}@ist.tugraz.at Institute for Software Technology Inhalt Motivation Logische Programme
MehrSchleifenanweisungen
Schleifenanweisungen Bisher: sequentielle Abarbeitung von Befehlen (von oben nach unten) Nun: Befehle mehrfach ausführen (= Programmschleife): for-anweisung - wenn feststeht, wie oft z.b.: eine Berechnung
MehrResolutionsalgorithmus
112 Resolutionskalkül Mit dem Begriff Kalkül bezeichnet man eine Menge von syntaktischen Umformungsregeln, mit denen man semantische Eigenschaften der Eingabeformel herleiten kann. Für den Resolutionskalkül:
Mehr26 Hierarchisch strukturierte Daten
Algorithmik II Peter Wilke Sommersemester 2005 Teil III Funktionale Programmierung 26 Hierarchisch strukturierte Daten Peter Wilke Algorithmik II Sommersemester 2005 1 Peter Wilke Algorithmik II Sommersemester
MehrJAVA-Datentypen und deren Wertebereich
Folge 8 Variablen & Operatoren JAVA 8.1 Variablen JAVA nutzt zum Ablegen (Zwischenspeichern) von Daten Variablen. (Dies funktioniert wie beim Taschenrechner. Dort können Sie mit der Taste eine Zahl zwischenspeichern).
Mehr3. Diskrete Mathematik
Diophantos von Alexandria um 250 Georg Cantor 1845-1918 Pythagoras um 570 v. Chr Pierre de Fermat 1607/8-1665 Seite 1 Inhalt der Vorlesung Teil 3: Diskrete Mathematik 3.1 Zahlentheorie: Abzählbarkeit,
MehrEinführung in die Programmierung mit VBA
Einführung in die Programmierung mit VBA Vorlesung vom 07. November 2016 Birger Krägelin Inhalt Vom Algorithmus zum Programm Programmiersprachen Programmieren mit VBA in Excel Datentypen und Variablen
MehrMengen und Abbildungen
1 Mengen und bbildungen sind Hilfsmittel ( Sprache ) zur Formulierung von Sachverhalten; naive Vorstellung gemäß Georg Cantor (1845-1918) (Begründer der Mengenlehre). Definition 1.1 Eine Menge M ist eine
MehrEiniges zu Resolutionen anhand der Aufgaben 6 und 7
Einiges zu Resolutionen anhand der Aufgaben 6 und 7 Es gibt eine Fülle von verschiedenen Resolutionen. Die bis jetzt behandelten möchte ich hier noch ein Mal kurz erläutern. Ferner möchte ich noch auf
Mehr8. Logische Programmierung. Prolog Sprachkonstrukte: Fakten. Prolog Übersicht
8. Logische Programmierung GPS-8-1 Übersicht zur logischen Programmierung GPS-8-2 Themen dieses Kapitels: Deklaratives Programmieren: Problem beschreiben statt Algorithmus implementieren (idealisiert).
MehrProgrammierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen
MehrRekursive Algorithmen
Rekursive Algorithmen In der Mathematik sind viele Funktionen rekursiv definiert. Der Begriff der Rekursion beinhaltet, dass zur Definition einer Funktion diese selbst wieder mit benutzt wird, allerdings
Mehr