Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik

Ähnliche Dokumente
Übung - Modellierung & Programmierung II

Proseminar Funktionales Programmieren. Stephan Kreutzer

Funktionale Programmierung

Übung KogInf Problemlösen, Suche, Lisp

26 Hierarchisch strukturierte Daten

Ausarbeitung des Interpreter Referats

Name und Syntax Was passiert? Anmerkungen / Erklärungen

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Grundlagen wissenschaftlichen Arbeitens COMMON LISP. Jürgen Prömer, Matr.Nr.: Nr. 9, Gruppe E, Leiter: Prof. Franz Puntigam WS 2004

Programmierkurs Python I

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

Interpreter - Gliederung

Shell-Scripting Linux-Kurs der Unix-AG

2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Gliederung. Programmierparadigmen. Sprachmittel in SCHEME. Objekte: Motivation. Objekte in Scheme

Einführung in die Programmiertechnik

Erwin Grüner

Programmierparadigmen

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil IVb WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Präzedenz von Operatoren

Shell-Scripting Linux-Kurs der Unix-AG

Algorithmen & Programmierung. Rekursive Funktionen (1)

Binärbäume und Listen

AuD-Tafelübung T-B5b

Tag 6. Module, benannte Funktionen und Rekursion

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

= 7 (In Binärdarstellung: = 0111; Unterlauf) = -8 (In Binärdarstellung: = 1000; Überlauf)

Grundlagen. Wie sind PHP-Dateien aufgebaut?

Shell-Scripting Linux-Kurs der Unix-AG

PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden.

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

Programmierung in Python

Einführung in die Programmierung mit VBA

Grundlagen der Programmierung

1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren

Vorsicht bei redundanten und unvollständigen Matches!

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Schleifenanweisungen

2017/01/23 15:50 1/5 Bedienung

4.Grundsätzliche Programmentwicklungsmethoden

Programmieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

Imperative vs. Funktionale Programmierung

Herzlich Willkommen. Über mich Termine Literatur Über PHP

WS 2011/2012. Georg Sauthoff 1. November 10, 2011

4.2 Selbstdefinierte Matlab-Funktionen 1. Teil

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Informatik I Übung, Woche 40

Korn-Shell: Einführung in Shellscripte 1. Übersicht: Einführung - 2. Die Kornshell im Detail - 3.Grundlagen der Programmierung

Organisatorisches/Einstieg

Funktionale Programmierung mit Haskell. Jan Hermanns

Grundlagen der Programmierung in C Funktionen

Deklarationen in C. Prof. Dr. Margarita Esponda

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Hansa-Gymnasium Scheme-Einführung Uwe Debacher

Technische Informatik II Rechnerarchitektur

Computer & GNU/Linux Einführung Teil 4

Programmieren I. Kapitel 5. Kontrollfluss

Softwareparadigmen EXP-Compiler Dokumentation v1.1 ( )

Rekursive Funktionen

SWP Prüfungsvorbereitung

Programmierkurs Java

Verkettete Datenstrukturen: Bäume

C- Kurs 04 Anweisungen

Lua Grundlagen Einführung in die Lua Programmiersprache

Grundbegriffe der Informatik Tutorium 5

Lispschnittstelle für VBA

VORKURS INFORMATIK EINE EINFÜHRUNG IN JAVASCRIPT

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Objektorientierte Programmierung

Early first draft Höllische Programmiersprachen Seminar im WS 2014/15 Speichermanagement

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Luis Kornblueh. May 22, 2014

Übung 4: Schreiben eines Shell-Skripts

Programmierkonventionen - 1 -

Webbasierte Programmierung

Programmieren als Grundkompetenz

Computergrundlagen Programmieren in C

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

LISP Intensivkurs Universität Ulm Abtl. Künstliche Intelligenz

Funktionale Programmiersprachen

Brainfuck Interpreter für ZX81

Informatik B von Adrian Neumann

Repetitorium Informatik (Java)

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

16 Interpretation. Scheme-Programme als Datenstruktur. Interpretation von Ausdrücken. Interpretation von Lambda. Lambda als Datenstruktur

Einführung in die C-Programmierung

Teile und Herrsche Teil 2

Vorlesung Unix-Praktikum

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 10

Entwurf von Algorithmen - Kontrollstrukturen

Benutzerfunktionen Was ist eine Funktion, was ist eine Prozedur?

Transkript:

Outline 1 Einleitung 2 Einführung in C 3 Fortgeschrittenes in C 4 Einführung in Emacs Lisp 5 Einführung in Prolog 6 Formale Semantik

Lisp 1958 von John McCarthy erfunden Funktionales Programmierparadigma Beeinflusst viele andere Sprachen Sprache (mit Macros) einfach zu verändern viele Dialekte: Common-Lisp, Emacs-Lisp, Clojure,.. Kein gemeinsamer Standard Übersetzung in Bytecode möglich aber auch nativer Maschinencode Datenstruktur Liste von zentraler Bedeutung LISP LISt Processing 5 5 Manchmal auch: LISP Lots of Isolated Silly Parentheses

Lisp Lisp verarbeitet Listen von Listen Listen sind durch Klammern begrenzt Listen-Elemente sind durch Leerzeichen getrennt: (1 (2 a)"aas") Daten und Programme werden durch Listen repräsentiert Programmausgaben können selbst wieder auswertbare Programme sein Neben Listen auch atoms: kleinste, nicht weiter zerlegbare Bestandteile Für Nutzer angezeigte Repräsentation von Listen und Atomen heißen symbolic expressions (kurz: s-expression)

Emacs-Lisp Einführung In den Übungen verwenden wir Emacs-Lisp. Die folgenden Folien geben bloß eine sehr kurze Zusammenfassung! Eine detailiertere Einführung beispielweise unter: www.gnu.org/software/emacs/emacs-lisp-intro.

Emacs Lisp - Benutzung interaktiver Emacs Lisp Modus: M-x ielm Auswerten eines einzelnen Ausdrucks: C-x C-e Auswerten aller Ausdrücke im Buffer: M-x eval-buffer Laden und auswerten einer Datei durch folgenden Ausdruck: (load ".../Pfad_zur_Datei/datei.el")

Emacs Lisp - Funktionsweise des Interpreters Daten und Programme in Listen organisiert Wenn Liste ausgeführt wird, ist erstes Element der Funktionsname 6 Einfaches Apostroph, oder (quote ) verhindert Ausführung, Liste wird daher unausgewertet zurückgegeben innerste Liste immer zuerst ausgewertet ELISP > (1 2 3) *** Eval error *** Invalid function: 1 ELISP > (1 2 3) (1 2 3) ELISP > ( quote (1 2 3)) (1 2 3) ELISP > (+ 1 2) 3 6 Unterart der Präfixnotation

Variablen Variablen oder auch Symbole können verschiedene Werte annehmen: Symbol, Nummer, Liste, String,... Insbesondere aber auch Funktionsdefinitionen 1 ( set foo bar) 2 ( set foo 1) 3 (set foo (1 2 3 (4 5) )) 4 ( set foo " Hello World")

Variablenzuweisung set: Beispiel: (set blumen (rose butterblume)) Zweites Argument wird an das Symbol blumen gebunden Beide Argumente mit quote versehen, da keine Auswertung erwünscht setq: Wie set aber erstes Argument automatisch in quote let: Beispiel: (let ((Variable Wert)..(Variable Wert)) body) Bindet wie set den Wert aus der Variablenliste an jeweilige Variable body beinhaltet anschließend auszuwertende Ausdrücke Bildet Scope und lokale Variablen überdecken gleichnamige außerhalb Wert nach der Auswertung des let-ausdrucks wieder zurückgesetzt Alle Wert-Variablen Paare parallel gebunden let*: Wie let aber sequentielle Bindung

Variable Binding Binding: Wie Variablename zum Speicherplatz korrespondiert Lexical Binding: Bindung eines Werts an eine Variable bei der Definition Dynamic Bining: Bindung eines Werts an eine Variable bei der Benutzung Jede Variable hat einen Stack auf dem Bindungen hinterlegt sind Neue Bindungen während der Laufzeit verdecken vorherige Bindungen Common Lisp (lex.) unterscheidet sich hier von Emacs List (dyn.)

Beispiel 1 ; dyn. binding lex. binding 2 ;---------------++------------- 3 (setq x 7) ; 7 7 4 ( defun blablub () x) ; blablub blablub 5 (blablub) ; 7 7 6 (let ((x 42)) (blablub)); 42 7 7 (blablub) ; 7 7

Funktionsdefinition Es gibt viele vordefinierte Grundfunktionen Funktionsdefinitionen beginnen mit dem Symbol defun Symbolname an den Funktionsdefinition gebunden werden soll Liste der benötigten Argumente Dokumentation der Funktion (bei C-h f funktionsname angezeigt) Optionaler Ausdruck um interaktive Ausführung zu ermöglichen Die Definition (tatsächlichen Befehle) 1 ( defun funktionsname ( Argumente) 2 " optionale Dokumentation" 3 ( Argumente für interaktives parsen) 4 body 5 )

Beispiel Addition 1 ( defun add (a b) 2 " Addiere a und b." 3 (+ a b) 4 ) 5 6 ( add 3 2) ; Beispiel für Funktionsaufruf

Bedingungen: if if-funktion braucht mindestens zwei Argumente 1 (if ( wahr-falsch-test) 2 ( Ausdrücke-wenn-wahr) 3 ( Ausdrücke-wenn-falsch) ; optional (" else") 4 ) Beispiele: 1 (if ( atom ( rose butterblume)) 2 ist_atom 3 ist_liste 4 ) 5 (if ( equal 1 2) 6 "1==2" 7 "1!=2" 8 )

Bedingungen: cond Neben if gibt es auch die Funktion cond (condition). Beispiel: 1 (cond 2 ( wahr-falsch-test Auswirkung) 3 ( wahr-falsch-test Auswirkung) 4... 5 ( wahr-falsch-test Auswirkung) 6 ) cond testet Ausdrücke auf wahr/falsch Ergibt Test wahr : Auswirkung wird ausgewertet; sonst: nächster Ausdruck wird getestet

Funktionen auf Listen car: 7 liefert das erste Listenelement cdr: 8 liefert alle Elemente nach dem ersten Listenelement car und cdr ändern Liste selbst nicht wohlaber setcar und setcdr cons: fügt das erste Element an Beginn des zweiten Arguments an ( cons nelke ( cons rose ( cons butterblume nil))) Beispiele: siehe Abschnitt zur Rekursion 7 content of the adress part of the register 8 content of the decrement part of the register

While Schleife (while wahr-falsch-test body) Interpreter wertet solang das zweite Argument body aus, bis der Test fehlschlägt 1 ( defun nenne_blumen ( blumen) 2 " Gib Listenelemente aus." 3 ( while blumen 4 (print (car blumen)) 5 ( setq blumen ( cdr blumen)) 6 ) 7 ) 8 ( nenne_blumen ( rose butterblume aster))

Rekursion Funktionsdefiniton in der die definierte Funktion selbst wieder vorkommt An die Abbruchbedingung denken! 1 ( defun funktionsname ( Argumente) 2 " Dokumentation" 3 (if Test-der-Abbruchbedinung 4 body 5 ( funktionsname neue-argumente) 6 ) 7 )

Beispiel Rekursion: Summe 1 ; Summe aller Zahlen einer Liste 2 ; rekursiv durch Abtrennen des jeweils ersten Elements 3 ; (summe nil) -> 0 4 ; (summe (3 5 2)) -> (+ 3 (summe (5 2))) ->... -> 10 5 ( defun summe (L) 6 (if (eq L nil) ; leere Liste? 7 0 ; summe( nil) -> 0 8 (+ (car L) (summe (cdr L))) ; head+summe(tail) 9 ) 10 ) 11 12 (summe (2 6 3 9))

Beispiel Rekursion: Liste generieren 1 ; Liste der Zahlen von n bis 1, rekursiv 2 ; durch Voranstellen von n den Zahlen von n-1 bis 1 3 ( defun countdown (n) 4 (if (eq n 0) ; keine Zahlen? 5 nil ; leere Liste 6 ( cons n ( countdown (- n 1))) ; n voranstellen 7 ) 8 ) 9 10 ( countdown 10)

Emacs Lisp Sprachelemente quote car cdr cons nil cond if atom eq not and or defun lambda + - * / mod < > >= <= /=