Logische und funktionale Programmierung

Ähnliche Dokumente
Prolog 5. Kapitel: Arithmetik

Prolog 6. Kapitel: Listenprädikate

Teil 4: Rekursion und Listen

Terme. Heute: Terme vergleichen. Struktur von Termen. Operatoren. Logik in der Praxis Logikprogrammierung (Prolog) p.1

Fragen zum Nachdenken: Wie könnte man das Fehlen eines Attribut-Wertes interpretieren?

Reihenfolge von Klauseln

Rekursive Listenverarbeitung

Prolog 3. Kapitel: Rekursion

5.3 Auswertung von Ausdrücken

Prolog 3. Kapitel: Rekursion

Prolog 4. Kapitel: Listen

Informatik I: Einführung in die Programmierung 3. Werte, Typen, Variablen und Ausdrücke

Logische und funktionale Programmierung

Formale Grundlagen 2008W. Vorlesung im 2008S Institut für Algebra Johannes Kepler Universität Linz

Übungen zu Kognitive Systeme I

Java I Vorlesung Imperatives Programmieren

3. Operatoren und Ausdrücke

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Einführung in das Programmieren Prolog Sommersemester Teil 2: Arithmetik. Version 1.0

Prolog 10. Kapitel: Cut und Negation

26 Hierarchisch strukturierte Daten

2 Logikprogrammierung am Beispiel Prolog

Prolog: Listen und Cut. Mark Ugarov

Operatoren und Ausdrücke

Rekursion. rekursive Prädikate. deklarative vs. prozedurale Bedeutung von Prädikaten. Programmierkurs Prolog p.1

4. Zahlendarstellungen

3.1 Reservierte Wörter

Modellierung und Programmierung 1

Kapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1

Theorembeweiser und ihre Anwendungen

IT-Sicherheitsmanagement. Teil 4: Einführung in algebraische Strukturen

Kapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2018/2018. Inhaltsverzeichnis 1

Programmierung Paradigmen und Konzepte

3. Operatoren und Ausdrücke

Abstrakte Syntax von Prolog (1)

3. Exkurs in weitere Arten der Programmierung

IT-Security. Teil 9: Einführung in algebraische Strukturen

3. Operatoren und Ausdrücke

Rekursive Programmiertechniken. Einfachste Rekursion mit Babuschka. Hyponymie: Unterbegriffshierarchie. Linksrekursion mit Babuschka

Programmiersprache Prolog

III.1 Prinzipien der funktionalen Programmierung - 1 -

Logische und funktionale Programmierung

Literatur und Videos. ISM WS 2017/18 Teil 4/Algebren

2. Ganze Zahlen int unsigned int

Angewandte Mathematik und Programmierung

Die Programmiersprache C Eine Einführung

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Kapitel 2: Ausdrücke. 1. Sorten und abstrakte Datentypen. 2. Ausdrücke 2.1 Syntax 2.2 Semantik 2.3 Ausdrücke in Java. 3. Funktionale Algorithmen

Gliederung. Programmierparadigmen. Einführung in Prolog: Einführung in Prolog: Programmieren in Prolog. Einführung Syntax Regeln Listen Relationen

Potenzen mit ganzzahligen Exponenten: Rechenregeln

Prolog 2. Kapitel: Matching und Beweisführung

Ausdrücke (1) Grundlegende Eigenschaften

Vorkurs Informatik WiSe 17/18

Grundlagen der Rechnerarchitektur. Binäre Logik und Arithmetik

2: Restklassen 2.1: Modulare Arithmetik

Martin Unold INFORMATIK. Geoinformatik und Vermessung

C-Programmierung: Ausdrücke und Operatoren#Division.2F

Wirtschaftsmathematik: Mathematische Grundlagen

5.3 Auswertung von Ausdrücken

Isomorphismus. Definition Gruppen-Isomorphismus. Seien (G, +) und (G, ) Gruppen. Die Abbildung f : G G heißt Gruppen-Isomorphismus, falls gilt

Abschnitt 7: Komplexität von imperativen Programmen

Programmieren I. Kapitel 5. Kontrollfluss

Transkript:

Logische und funktionale Programmierung Vorlesung 8: Arithmetik, Listenprädikate, weitere Prolog Prädikate Babeş-Bolyai Universität, Department für Informatik, Cluj-Napoca csacarea@cs.ubbcluj.ro 1/67

ARITHMETIK IN PROLOG Die meisten Prologimplementierungen stellen Operatoren zur Verarbeitung von Zahlen zur Verfügung. Hierzu gehören die arithmetischen Operatoren + (Addition), - (Subtraktion), * (Multiplikation), / (Division), // (ganzzahlige Division), mod (modulo) und ˆ (Exponent). Alle Operatoren können auch als Funktoren verwendet werden: Statt 3+4 kann man auch +(3,4) schreiben. Die verwendeten Symbole für die Operatoren hängen von dem jeweiligen Prolog-Interpreter ab (hier angegeben für SWI-Prolog). Vorsicht: Arithmetische Operationen gehören nicht zu den Kernkonzepten von Prolog. Mit ihnen verlässt man das auf Unifikation basierende Grundprinzip der deklarativen Programmierung. 2/67

RECHNEN IN PROLOG 3/67

ARITHMETISCHE OPERATOREN UND DIE EVALUATION 4/67

DER EVALUATIONSOPERATOR IS/2 5/67

VERGLEICH IS/2 MIT NORMALEN PROLOGPRÄDIKATEN 6/67

ARITHMETISCHE VERGLEICHOPERATOREN 7/67

EVALUATION ERZWINGENDE OPERATOREN IN PRÄDIKATSDEFINITIONEN 8/67

LISTENLÄNGE BESTIMMEN OHNE AKKUMULATOR 9/67

TRACE: LISTENLÄNGE OHNE AKKUMULATOR 10/67

LISTENLÄNGE BESTIMMEN MIT AKKUMULATOR 11/67

TRACE: LISTENLÄNGE MIT AKKUMULATOR 12/67

VERGLEICH LÄNGE MIT UND OHNE AKKUMULATOR 13/67

MAXIMALES LISTENELEMENT BESTIMMEN MIT AKKUMULATOR 14/67

MAXIMALES LISTENELEMENT BESTIMMEN OHNE AKKUMULATOR 15/67

AKKUMULATOREN: STRUKTUR DER PROGRAMME 16/67

ZUSAMMENFASSUNG Keywords: Rechnen in Prolog mit dem Evaluationsoperator is, arithmetische Vergleichsoperatoren, Akkumulatoren. Wichtig: Die rekursive Verarbeitung von Listen mit Akkumulatoren ist eine zentrale Programmiertechnik in Prolog. Vorsicht: Die arithmetischen Vergleichsoperatoren und der Operator is fordern zwingend sofort evaluierbare Terme. Uninstantiierte Terme führen zu einem Abbruch mit Fehlermeldung. 17/67

WIEDERHOLUNG 18/67

WIEDERHOLUNG KONKATENATION VON LISTEN: APPEND/3 19/67

APPEND/3 DEKLARATIV 20/67

APPEND/3 PROZEDURAL 21/67

VERWENDUNG VON APPEND/3 22/67

BESONDERHEITEN VON APPEND/3 Mit dem Prädikat append/3 können sehr unterschiedliche Funktionen implementiert werden. Dennoch muss man beachten, dass bei jedem Aufruf von append/3 die Liste im ersten Argument komplett abgearbeitet werden muss. aufgrund der kompletten Listenabarbeitung Programme mit vielen Aufrufen von append/3 sehr schnell ineffizient werden können. Man sollte also bei der Verwendung von append/3 in rekursiven Prädikaten vorsichtig sein. 23/67

SUFFIXE, PRÄFIXE UND ALLGEMEINE SUBLISTEN: PREFIX/2, SUFFIX/2, SUBLIST/2 24/67

SUFFIXE, PRÄFIXE UND ALLGEMEINE SUBLISTEN: PREFIX/2, SUFFIX/2, SUBLIST/2 25/67

SUFFIXE, PRÄFIXE UND ALLGEMEINE SUBLISTEN: PREFIX/2, SUFFIX/2, SUBLIST/2 26/67

LÖSCHEN EINES ELEMENTS: DELETE/3 27/67

UMDREHEN VON LISTEN: NAIVEREV/2 (NAIVE DEFINITION) 28/67

WARUM NAIVES REVERSE? Das naive naiverev/2 wird naiv genannt, weil das zu lösende Problem eigentlich mit linearer Laufzeit gelöst werden könnte. Das naive naiverev/2 benötigt jedoch durch den Einsatz von append/3 kubische Laufzeit. Betrachte den Trace von naiverev([a,b,c,d],x). 29/67

REVERSE/2 MIT AKKUMULATOR 30/67

REVERSE/2 PROZEDURAL 31/67

LISTENVERARBEITUNG MIT AKKUMULATORLISTE 32/67

DIFFERENZLISTEN 33/67

BEISPIEL: [1,2,3] ALS DIFFERENZLISTE 34/67

VORTEIL VON DIFFERENZLISTEN: KONKATENATION IN EINEM SCHRITT 35/67

VORTEIL VON DIFFERENZLISTEN: KONKATENATION IN EINEM SCHRITT 36/67

VORTEIL VON DIFFERENZLISTEN: KONKATENATION IN EINEM SCHRITT 37/67

VORTEIL VON DIFFERENZLISTEN: KONKATENATION IN EINEM SCHRITT 38/67

VORTEIL VON DIFFERENZLISTEN: KONKATENATION IN EINEM SCHRITT 39/67

VORTEIL VON DIFFERENZLISTEN: KONKATENATION IN EINEM SCHRITT 40/67

VORTEIL VON DIFFERENZLISTEN: KONKATENATION IN EINEM SCHRITT 41/67

VORTEIL VON DIFFERENZLISTEN: KONKATENATION IN EINEM SCHRITT 42/67

WIEDERHOLUNG TERME 43/67

ZUSAMMENGESETZTE BZW. KOMPLEXE TERME 44/67

WIEDERHOLUNG: BESONDERE TERME LISTEN UND ARITHMETISCHE AUSDRÜCKE 45/67

WIEDERHOLUNG: MATCHING-/ UNIFIKATIONSOPERATOR 46/67

WIEDERHOLUNG: ARITHMETISCHER GLEICHHEITSOPERATOR 47/67

Vergleich von Termen 48/67

BERSICHT MATCHING- UND VERGLEICHSOPERATOREN 49/67

ANALYSE VON NICHT ZUSAMMENGESETZTEN TERMEN 50/67

ANALYSE ZUSAMMENGESETZTER TERME 51/67

DAS PRÄDIKAT: FUNCTOR/3 52/67

DAS PRÄDIKAT: FUNCTOR/3 53/67

TESTEN OB EIN TERM ZUSAMMENGESETZT IST 54/67

DAS PRÄDIKAT: ARG/3 55/67

DAS UNIV-PRÄDIKAT: =../2 56/67

BILDSCHIRMAUSGABE: WRITE CANONICAL/1 UND WRITE/1 57/67

STRUKTURIERTE BILDSCHIRMAUSGABE: NL/0 UND TAB/1 58/67

OPERATOREN EXTERNE UND INTERNE NOTATION 59/67

TYPEN VON OPERATOREN 60/67

PRÄZEDENZ VON OPERATOREN 61/67

ASSOZIATIVITÄT VON OPERATOREN 62/67

DEFINITION EIGENER OPERATOREN 63/67

DEFINITION BESTEHENDER OPERATOREN 64/67

BEISPIEL: ZWEI VERSCHIEDENE OPERATOREN 65/67

BEISPIEL 66/67

DEFINITION EINES EIGENEN OPERATORS 67/67