Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der...

42

Transcript of Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der...

Page 1: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Grundlagen der Programmierung 2(1.A)

Prof. Dr. Manfred Schmidt-Schauÿ

Künstliche Intelligenz und Softwaretechnologie

20. April 2006

Page 2: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Grundlagen der Programmierung 2:Geplanter Inhalt der ersten Halfte

Grundlagen der Programmierung 2 (1.A) - 2 -

• Programmiersprachen: Paradigmen• rekursives Programmieren in Haskell• Strome als unendliche Listen in Haskell• Operationale Semantik: Haskell• Sortieren, Suchen und Baume• Polymorphe Typen und Typklassen• Parallele Berechnungen

Page 3: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Bucher, Literatur, URLs

Grundlagen der Programmierung 2 (1.A) - 3 -

• http://www.cs.uni-frankfurt.de/˜prg2• www.haskell.org Haskell-Website• Manuel Chakravarty und Gabriele Keller Einfuhrung in die Pro-

grammierung mit Haskell• Richard Bird: Introduction to Functional Programming Using

Haskell

Page 4: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Interpreter / Compiler

Grundlagen der Programmierung 2 (1.A) - 4 -

Interpreter fuhrt ein Programm aus,(bzw. wertet ein Programm aus),Grundlage: Text des ProgrammsJeder Programmbefehl wird einzeln eingelesenund dann ausgefuhrt.

Compiler (Ubersetzer) erzeugt aus Programm einen ausfuhrbaren Modul.Programmumstellungen, OptimierungenEffekt des Programms muss gleich bleiben.

Ablaufumgebung Hier erfolgt die Ausfuhrung des Programms

Page 5: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Laufzeit / Compilezeit

Grundlagen der Programmierung 2 (1.A) - 5 -

Compilezeit: Zeitraum der Analyse bzw. Ubersetzung des Programmsstatische Typuberprufung, Optimierung.

Laufzeit: Zeitraum der Ausfuhrung des ProgrammsZ.B. dynamische Typuberprufung, Ein-Ausgabe.

Page 6: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Programmiersprachen: wesentliche Merkmale

Grundlagen der Programmierung 2 (1.A) - 6 -

Syntax

Beschreibung der Programme als Texte

Semantik

Beschreibung der Aktionen / Bedeutung eines Programms

Page 7: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Programmiersprachen: wesentliche Merkmale

Grundlagen der Programmierung 2 (1.A) - 7 -

imperativ

Programm ist Folge von Befehlen

sukzessive Anderung des Speicherinhalts

Ergebnis: letzter Zustand

Ein imperatives Programm sagt prazise:was (welche Anweisung),wann (Reihenfolge der Anweisungen)womit (Speicherplatz/Variable) zu geschehen hat.

prozedural: Strukturierung in (imperativen) Programmiersprachen

Prozedur = Unterprogramm

Aufruf mit Argumenten im Programm

Ziel: Ubersichtlichkeit; Wiederverwendbarkeit

Page 8: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Programmiersprachen: Merkmale (2)

Grundlagen der Programmierung 2 (1.A) - 8 -

funktional: Programm ist strukturiert in FunktionsdefinitionenAusdrucke = Anwendung von Funktionen auf ArgumenteBerechnung = Auswertung von AusdruckenErgebnis = Nur der Return-Wert

Varianten von funktionalen Programmiersprachen:

nicht-strikt: Argumente werden so spat wie moglich ausgewertet

strikt: Argumente werden vor Funktionsaufruf ausgewertet

pur: Objekte haben nur einen Wert, keine Mutation moglich

nicht-pur: Objekte veranderbar, Seiteneffekte moglich

deklarativ:

Idealfall: Spezifikation = deklaratives Programm

Betonung auf Logik, weniger algorithmisch

Beispiele: logische Programmierung, Prolog

Page 9: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Programmiersprachen: Merkmale (3)

Grundlagen der Programmierung 2 (1.A) - 9 -

objektorientiert:

Verwendung in imperativen Programmiersprachen

Strukturierung des Programm in Klassen.

Ziel: Ubersichtlichkeit, Wiederverwendung

Ausfuhrung eines Programms:

Erzeugung von Objekten

Austausch von Nachrichten zwischen Objekten

Page 10: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Programmiersprachen: Merkmale (4)

Grundlagen der Programmierung 2 (1.A) - 10 -

typisiert

Alle Programmiersprachen haben eine Typisierung• statische Typisierung: Programmtext• dynamische Typisierung: Ausfuhrungszeit des Programms

• schwache Typisierung:Typfehler zur Laufzeit sind moglich

• starke Typisierung:Typfehler zur Laufzeit sind nicht moglich

Page 11: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Beispiele fur Programmiersprachen

Grundlagen der Programmierung 2 (1.A) - 11 -

Haskell: Eine funktionale Programmiersprache

funktional, nicht-strikt, hat ein polymorphes und starkes Typsystem,

flexible Datenstrukturen,

gute Abstraktionseigenschaften,

Ziele: pures Programmieren,Auswerten von Ausdruckenrekursives Programmieren,Typsystem

Python: Eine prozedurale Programmiersprache

prozedural; schwaches, dynamisches Typsystem,

flexible Datenstrukturen, Objektorientierung.

Page 12: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Java

Grundlagen der Programmierung 2 (1.A) - 12 -

zentrale Idee der Objektorientierten Programmiersprachen (OOP) :

Objekt als Strukturierungskonzept.

Objekte zusammengesetzte (Daten-)Einheitbelegt Speicherplatzhaben eine Identitat.sind gekapselt. Veranderungen von Objekten werden

stets mittels der definierten Methoden durchgefuhrt.gehoren zu einer Klasse – (Instanz einer Klasse)

Kommunikation durch Senden/Empfangen von Nachrichten.

Page 13: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Fahrzeugbeispiel: (1)

Grundlagen der Programmierung 2 (1.A) - 13 -

class Fahrzeug {

public double Hoechstgeschwindigkeit;

private String Eigentuemer;

private static long Anzahl;

static {

Anzahl = 0;

}

public static long Anzahl() {

return Anzahl;

}

public Fahrzeug() { // Konstruktor:

Anzahl = Anzahl + 1;

}

Page 14: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Java: Fahrzeugbeispiel

Grundlagen der Programmierung 2 (1.A) - 14 -

public Fahrzeug(double Hoechstgeschwindigkeit,

String Eigentuemer) {

Anzahl = Anzahl +1;

this.Eigentuemer = Eigentuemer;

this.Hoechstgeschwindigkeit = Hoechstgeschwindigkeit;

}

public double Hoechstgeschwindigkeit () {

return Hoechstgeschwindigkeit ;

}

public void loesche_Fahrzeug() {

Anzahl = Anzahl - 1;

}

public String Eigentuemer () {

return Eigentuemer;

}

}

Page 15: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Java: Fahrzeugbeispiel

Grundlagen der Programmierung 2 (1.A) - 15 -

Page 16: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Java: Fahrzeugbeispiel

Grundlagen der Programmierung 2 (1.A) - 16 -

class Auto extends Fahrzeug {

public String Autokennzeichen;

public Auto(double Hoechstgeschwindigkeit,

String Eigentuemer, String kennzeichen) {

super(Hoechstgeschwindigkeit, Eigentuemer);

this.Hoechstgeschwindigkeit = Hoechstgeschwindigkeit;

this.Autokennzeichen = kennzeichen;

}

}

Page 17: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

OO: Klassen

Grundlagen der Programmierung 2 (1.A) - 17 -

Klassen entsprechen Typschablonen• werden in der OO-Programmiersprache definiert.• enthalten die Definition der Struktur der zugehorigen

Objekte und der Methoden, die auf Objekte dieser Klasse anwendbarsind.

• entsprechen einer Menge von Objekten mit gleichem Verhalten.• i.a. eine Realisierung eines abstrakten Datentyps• entsprechen einem Typ zur Compilezeit• sind in einer (Baum-)Hierarchie angeordnet (Ober- ; Unterklasse)• Die Klassenhierarchie wird verwendet, um allgemeine Aspekte von

Objekten in einer Oberklasse zu definieren und zu implementieren,und dann in Unterklassen die spezielleren Eigenschaften zu imple-mentieren.

• Elementare Datentypen (Zahlen, . . . ) sind keine Objekte• konnen zu Objekten gemacht werden, falls notig• Vereinfachte Handhabung in Java 5

Page 18: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Vergleich mit Haskell

Grundlagen der Programmierung 2 (1.A) - 18 -

Java | HaskellKlasse entspricht Typ bzw. einer TypklasseMethode entspricht Funktion (bzw. Prozedur)Objekt entspricht konstruiertem Datenobjekt.Senden von Nachrichten entspricht Funktionsaufruf

Seiteneffekte | Nur Kopieren moglichAliasing | unproblematisch: keine Seiteneffekte

Page 19: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Objekte und Methoden: Genauer

Grundlagen der Programmierung 2 (1.A) - 19 -

Objekt besteht aus Daten; bzw. Attributendas Innere eines Objektes ist nicht direkt sichtbar.Attribute sind nur uber erlaubte Methodenaufrufe anderbardas Innere des Objektes (seine Attribute) sichtbar und

anderbar.gehoren zu einer Klasse: ( Instanz einer Klasse)

Objekt analog zu einem Record, bei dem die einzelnen Attribute

mit Attributnamen ansprechbar sind.

Satz (Verbund) in einer Datenbank, bestehend aus At-

tributen.

n-Tupel in Haskell mit Attributnamen

Page 20: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Methoden

Grundlagen der Programmierung 2 (1.A) - 20 -

Methoden: auf Objekten ausfuhrbare Operationen,

analog zu Prozeduren.

Methodenaufruf: Senden einer Nachricht

Methode kann per Dot-Notation an ein Objekt gekoppelt

sein

bzw. wird auf ein Objekt angewendet.

Nachrichten: Argumente der Prozedur.

Page 21: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Spezifische Aufgaben von Methoden:

Grundlagen der Programmierung 2 (1.A) - 21 -

Konstruktion: Erzeugen und Initialisieren eines Objekts

Destruktion: Abschlussarbeiten und Loschen eines Objekts

Selektion: Lesen von internen Daten des Objekts

Modifikation: Andern der internen Daten des Objekts

Andere Verarbeitung allgemeine Prozedur

Page 22: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Logische Programmierung

Grundlagen der Programmierung 2 (1.A) - 22 -

Grundlegende Idee: Verwendung der Pradikatenlogik

Genauer: HornlogikProgramm besteht nur aus Formeln∀x1, . . . xn.A1 ∧ . . . ∧An ⇒ B(Hornklauseln)Schreibweise: B : −A1, . . . An

Page 23: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Logische Programmierung: Programm-ausfuhrung

Grundlagen der Programmierung 2 (1.A) - 23 -

Ausfuhrung = Beantwortung von Anfragen an das Programm

Anfrage ist eine Formel: ∃y1, . . . ym.C1 ∧ . . . ∧ Cm

entspricht einer negativen Hornklausel

Antwort die moglichen Tupel y1, . . . ym

bzw Ja / Nein

Ausfuhrung: Schlussfolgern

Page 24: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Logische Programmierung: Beispiel

Grundlagen der Programmierung 2 (1.A) - 24 -

vater(peter,maria).

mutter(susanne,maria).

vater(peter,monika).

frau(maria).

frau(susanne).

frau(monika).

mann(peter).

eltern(X,Y) :- vater(X,Y).

eltern(X,Y) :- mutter(X,Y).

Anfrage: eltern(peter,maria)?

Antwort: Ja

Anfrage: eltern(peter,X)?

Antwort 1: X = mariaAntwort 2: X = monika

Page 25: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Haskell

Grundlagen der Programmierung 2 (1.A) - 25 -

rekursive Programmierung

mit der streng typisierten,

funktionalen Programmiersprache

Haskell

Page 26: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Haskell

Grundlagen der Programmierung 2 (1.A) - 26 -

Wichtige Eigenschaften funktionaler Programmiersprachen

Referentielle TransparenzGleiche Funktion, gleiche Argumente =⇒ gleicher (Ruckgabe-)WertKeine Seiteneffekte! D.h. keine Anderung von Objekten

Verzogerte AuswertungNur die fur das Resultat notwendigen Unterausdrucke werden(so spat wie moglich) ausgewertet.

Polymorphes TypsystemNur Ausdrucke mit Typ sind erlaubt — es gibt Typvariablen.Das Typsystem garantiert: keine dynamischen Typfehler.

Automatische SpeicherverwaltungAnforderung und Freigabe von Speicher

Funktionen sind Datenobjektemogliche Verwendung: in Datenobjekten, als Argument, als Resultat.

Page 27: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Programmierung in Haskell

Grundlagen der Programmierung 2 (1.A) - 27 -

Interpreter Hugs 98 und GHCi

Grundprinzipien:

• Definition von Funktionenquadrat x = x*x

• Aufbau von Ausdrucken:Anwendung der Funktion auf Argumente,die wieder Ausdrucke sein konnen.3*(quadrat 5)

• Nur der Wert von Ausdrucken wird bei derAuswertung zuruckgegeben.

75

Page 28: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Umgang mit dem Interpreter

Grundlagen der Programmierung 2 (1.A) - 28 -

Aufruf: ghci (im richtigen Fenster)Online-Report http://www.haskell.org/onlinereport

>:h Hilfe>:t Ausdruck druckt den Typ des Ausdrucks>:set +t ... Optionen andern

Module im Interpreter verwenden:

:m +Char +Numeric ...

Page 29: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Einfache Daten und Operatoren

Grundlagen der Programmierung 2 (1.A) - 29 -

• ganze Zahlen Typ Int

mit |n| ≤ 231 − 1 = 2147483647• beliebig lange ganze Zahlen (vom Typ Integer),• rationale Zahlen 3%7 (Rational)• Gleitkommazahlen 3.456e+10 (Float)• Zeichen ’a’ Char

• Datenkonstruktoren True, False; Typ Bool

• Arithmetische Operatoren: +,−, ∗, /,• Arithmetische Vergleiche: ==, <=, < . . .• Logische Operatoren: &&, ||, not

Page 30: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Beispiel

Grundlagen der Programmierung 2 (1.A) - 30 -

Definition eines Polynoms x2 + y2:

quadratsumme x y = quadrat x + quadrat y

Auswertung:

...

Main> quadratsumme 3 4

25

Page 31: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Typen in Haskell

Grundlagen der Programmierung 2 (1.A) - 31 -

Typ Konstanten, FunktionenInt 1,2,3,4,. . .Integer 1,2,3,4,. . .Float 1.23e45Double 1.23e45Integer -> Integer -> Integer (+)Integer -> Integer quadrat

Integer -> Integer -> Integer quadratsumme

Page 32: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Typen in Haskell

Grundlagen der Programmierung 2 (1.A) - 32 -

Beispiel

Die Ausgabe des Interpreters fur die Addition (+) ist komplizierter:

(+) :: forall a. (Num a) => a -> a -> a

D.h.: Fur alle Typen a, die man als numerisch klassifiziert hat,

d.h. die in der Typklasse Num sind,

hat (+) den Typ a -> a -> a

Z.B. gilt:

(+)::Integer -> Integer -> Integer

(+)::Double -> Double -> Double

Page 33: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

(vereinfachte) Haskell-Syntax

Grundlagen der Programmierung 2 (1.A) - 33 -

〈FunktionsDefinition〉 ::= 〈Funktionsname〉〈Parameter〉∗ = 〈Ausdruck〉〈Ausdruck〉 ::= 〈Bezeichner〉 | 〈Zahl〉

| (〈Ausdruck〉 〈Ausdruck〉)| (〈Ausdruck〉)| (〈Ausdruck〉〈BinInfixOp〉 〈Ausdruck〉)

〈Bezeichner〉 ::= 〈Funktionsname〉 | 〈Datenkonstruktorname〉| 〈Parameter〉 | 〈BinInfixOp〉

〈BinInfixOp〉 ::= ∗ | + | − | /

Argumente einer Funktion: formale Parameter.Anzahl der Argumente: Stelligkeit der Funktion: (ar(f))

Page 34: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Beispiel zur Grammatik

Grundlagen der Programmierung 2 (1.A) - 34 -

quadratsumme x y = (quadrat x) + (quadrat y)

quadratsumme Funktionsnamex,y formale Parameter= gleiches Zeichen wie in Grammatik(quadrat x) + (quadrat y) 〈Ausdruck〉 der Form 〈Ausdruck〉+ 〈Ausdruck〉+ binarer Infix-Operatorquadrat x Anwendung: quadrat ist ein Ausdruck

und x ist ein Ausdruck

Page 35: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Haskell: Verschiedenes . . .

Grundlagen der Programmierung 2 (1.A) - 35 -

Prelude: vordefinierte Funktionen, Typen und Datenkonstruktoren

Prafix, Infix, Prioritaten ist moglich fur Operatoren

Konventionen zur Klammerung: s1 s2 . . . sn ≡ ((. . . (s1 s2) s3 . . .) sn)

Kontextbedingungen in Funktionsdefinitionen:

formale Parameter mussen verschiedenen sein;

Keine undefinierten Variablen im Rumpf!

Weitere Trennzeichen: “{“,“}“ Semikolon “; “

Layout-sensibel: bewirkt Klammerung mit {, }.

Page 36: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Fallunterscheidung

Grundlagen der Programmierung 2 (1.A) - 36 -

Syntax: if 〈Ausdruck〉 then 〈Ausdruck〉 else 〈Ausdruck〉

”if“,

”then“,

”else“ sind reservierte (Schlusselworte)

und durfen nicht als Funktionsnamen bzw. Parameternamen verwendet

werden.

Der erste Ausdruck ist eine Bedingung. Diese muss Typ Bool haben.

Typisierung: if Bool . . . then typ else typ

(if 1 then 1 else 2) ergibt einen Fehler

Page 37: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Bedingungen, Arithmetische Vergleiche

Grundlagen der Programmierung 2 (1.A) - 37 -

Die Infixoperatoren ==, <, >, <=, >=, /= haben den Typ:

Integer -> Integer -> Bool

Achtung: = ist reserviert fur Funktionsdefinitionen, und let

Boolesche Ausdrucke

sind kombinierbar mit not, ||, && (nicht, oder, und)

Konstanten sind True, False.

Eine kompliziertere Bedingung: 3.0 <= x && x < 5.0

Page 38: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Darstellungen eines Programms

Grundlagen der Programmierung 2 (1.A) - 38 -

Benutzer-Syntax: vom Programmierer benutzt

Interne Syntax: “Linearisierung“; entzuckerte Version;

voll geklammert; alle Operatoren sind Prafix; kein Layout

Ableitungsbaum (Herleitungsbaum): Vom Kompiler erzeugt

Syntaxbaum: Eindeutige Darstellung des Programms in einem mar-

kierten Baum.

Hierauf lasst sich eindeutig die Ausfuhrung des Programms definie-

ren.

Page 39: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Syntaxbaum: Beispiele

Grundlagen der Programmierung 2 (1.A) - 39 -

if x <= 0 then 1 else x*(quadrat (x-1))

ifThenElse

ttiiiiiiiiiiiiiiiiiiii

��,,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<=

||yyyy

yyyy

y

""FFFF

FFFF

F 1 ∗wwoooooooooooooooo

��x 0 x app

wwppppppppppp

��

quadrat −

wwppppppppppppppp

��

x 1

Page 40: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Syntaxbaum: Beispiele

Grundlagen der Programmierung 2 (1.A) - 40 -

Zwei Syntaxbaume zu 1*2:

∗����

����

��

��>>>

>>>>

> app

yyttttttttt

""FFFF

FFFF

F

1 2 app

||yyyy

yyyy

y

%%JJJJJJJJJJJ 2

∗ 1

Page 41: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Aufrufhierarchie und Rekursive Definitionen

Grundlagen der Programmierung 2 (1.A) - 41 -

f, g, fi seien Haskell-definierte Funktionen.

f referenziert g direkt, wenn g im Rumpf von f vorkommt.f referenziert g (indirekt), wenn es Funktionen f1, . . . , fn gibt,

so dass gilt: f referenziert direkt f1,f1 referenziert direkt f2, . . . ,fn referenziert direkt g.

f ist direkt rekursiv, wenn f sich selbst direkt referenziert.f ist rekursiv, wenn f sich selbst (indirekt) referenziert.Verschrankte Rekursion: wenn f die Funktion g referenziert

und g die Funktion fauch fur allgemeinere Falle

Page 42: Grundlagen der Programmierung 2 (1.A)prg2/SS2006/...Interpreter / Compiler Grundlagen der Programmierung 2 (1.A) - 4 - Interpreter f¨uhrt ein Programm aus, (bzw. wertet ein Programm

Beispiel: Aufrufhierarchie

Grundlagen der Programmierung 2 (1.A) - 42 -

quadrat x = x*x

quadratsumme x y = (quadrat x) + (quadrat y)

quadratsumme ruft direkt die Funktion quadrat auf,

quadratsumme ruft direkt die (eingebaute) Funktion ∗ auf

Die Funktion quadratsumme ist somit nicht rekursiv