• Keine Ergebnisse gefunden

4.1 Die Interpreter-Umgebung

N/A
N/A
Protected

Academic year: 2022

Aktie "4.1 Die Interpreter-Umgebung"

Copied!
25
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Abschluss:

• Jedes weitere Sprachkonstrukt erfordert neue Methoden zur Verifikation :-)

• Wie behandelt man dynamische Datenstrukturen, Objekte, Klassen, Vererbung ?

• Wie geht man mit Nebenläufigkeit, Reaktivität um ??

• Erlauben die vorgestellten Methoden alles zu beweisen ==⇒ Vollständigkeit ?

• Wie weit lässt sich Verifikation automatisieren ?

• Wieviel Hilfe muss die Programmiererin und/oder die Verifiziererin geben ?

(2)

Funktionale Programmierung

(3)

John McCarthy, Stanford

(4)

Robin Milner, Edinburgh

(5)

Xavier Leroy, INRIA, Paris

(6)

4 Grundlagen

• Interpreter-Umgebung

• Ausdrücke

• Wert-Definitionen

• Komplexere Datenstrukturen

• Listen

• Definitionen (Forts.)

• Benutzer-definierte Datentypen

(7)

4.1 Die Interpreter-Umgebung

Der Interpreter wird mit aufgerufen...

! "$# %& #(') *,+.-0/,+21

3

Definitionen von Variablen, Funktionen, ... können direkt eingegeben werden :-)

Alternativ kann man sie aus einer Datei einlesen:

3 3

465789+:;4=<<

(8)

4.2 Ausdrücke

3

*,<<

&

3

*

,<<

&

3

Bei

3 wartet der Interpreter auf Eingabe.

Das << bewirkt Auswertung der bisherigen Eingabe.

→ Das Ergebnis wird berechnet und mit seinem Typ ausgegeben.

Vorteil: Das Testen von einzelnen Funktionen kann stattfinden, ohne jedesmal neu zu übersetzen :-)

(9)

Vordefinierte Konstanten und Operatoren:

Typ Konstanten: Beispiele Operatoren

- *

*,+.- ,+.- + + + +

8' 8

4 8;4

(10)

Typ Vergleichsoperatoren

*,+.- +.- <

#78 $ - + '708

7& <

#78 $

7& $ 8')

1 ('7 1 +.-

+.- <

#78 $ 8'

(11)

Typ Vergleichsoperatoren

3

*,+.-

+ +.- <<

0( - +

3 4

;4 4 4 4 7& 4 4 4 4 4=<<

$ 8') 4

7& 4

3

01 1 +.-

+.- <<

8'

(12)

4.3 Wert-Definitionen

Mit kann man eine Variable mit einem Wert belegen.

Die Variable behält diesen Wert für immer :-)

3

# *,<<

#78 # &

3

#<<

&

Achtung:

Variablen-Namen werden klein geschrieben !!!

(13)

Eine erneute Definition für # weist nicht # einen neuen Wert zu, sondern erzeugt eine neue Variable mit Namen # .

3

# 1 <<

#78 # & 1

3

#<<

& 1

3

# 4 # 4=<<

#78 # $ 8') 4 # 4

Die alte Definition wurde unsichtbar (ist aber trotzdem noch vorhanden :-)

Offenbar kann die neue Variable auch einen anderen Typ haben :-)

(14)

4.4 Komplexere Datenstrukturen

Paare:

3

* <<

&

& *

3

1 4 8;4 <<

$ 8') 8 4 8;4

Tupel:

3 1 * <<

&

&

&

& 1 *

3

$4 8;4 8' *,+

<8<

$ 8')

0( $4 8;4 8' *,+

(15)

Simultane Definition von Variablen:

3

* +.- <<

#78 & *

#78 0( +

3

#78 *

* +.- <<

#78 0( +.-

(16)

Records: Beispiel:

3

(') (#(' $ 8'),< $ 8'),< 8 (' & <<

(') #(' $ 8'),< $ 8'),< 8 (' & <

3

#(' 47 ;4=< 4 (' 4=< 8 (' 1 <<

#78 (') (#(' 47 ;4=< 4 (' 4=< 8 (' 1

3

4 ;4=< 8 (' 1 *9< #(' 4 4 <<

#78 (') (#(' 4 4=< 4 ;4=< 8 (' 1 *

3

8 (' 1 *9< 4 ;4=< #(' 4 4

#78 (') (#(' 4 4=< 4 ;4=< 8 (' 1 *

3 <<

8'

(17)

Bemerkung:

... Records sind Tupel mit benannten Komponenten, deren Reihenfolge irrelevant ist :-)

... Als neuer Typ muss ein Record vor seiner Benutzung mit einer

-Deklaration eingeführt werden.

... Typ-Namen und Record-Komponenten werden klein geschrieben :-)

Zugriff auf Record-Komponenten ... per Komponenten-Selektion:

3

9+ #(',<<

$ 8') 7

(18)

Bemerkung:

... Records sind Tupel mit benannten Komponenten, deren Reihenfolge irrelevant ist :-)

... Als neuer Typ muss ein Record vor seiner Benutzung mit einer

-Deklaration eingeführt werden.

... Typ-Namen und Record-Komponenten werden klein geschrieben :-)

Zugriff auf Record-Komponenten

... per Komponenten-Selektion:

3

9+ #(',<<

$ 8') 47 ;4

(19)

... mit Pattern Matching:

3

(#(' ,< < 8 ' <<

#78 $ 8') 47 ;4

#78 $ 8') 4 (' 4

#78 & 1

... und wenn einen nicht alles interessiert:

3

(#(' <<

#78 $ 8') 47 ;4

(20)

Fallunterscheidung:

und

;( )

$ - 4 ;4

4" 4

4 $ 0 0& 8 4

;( )

$ 8'

8

01

Das zweite Beispiel kann auch so geschrieben werden (-:

01

(21)

Vorsicht bei redundanten und unvollständigen Matches!

3

9<<

#78 &

3

;( ) $ - 4 ;4 <<

' ( ('

;( ) ( $ "$#9+

5('7 ( #78 ( ;( )

8 " ( ) '7 $44 * +

3

;( )

$ - 4 ;4

- 4 4

4 $ 0 0& 8 4=<<

' ;( ) +

$ 8') 4 $ 0 0& 8 4

(22)

4.5 Listen

Listen werden mithilfe von und konstruiert.

Kurzschreibweise:

1 < - <

3

7

<<

#78 7 $

3

:7 <<

#78 & $

3

< 1 < *

<<

#78 & $ < 1 < *

3

21 *,

<<

#78 & $ < 1 < *

(23)

Achtung:

Alle Elemente müssen den gleichen Typ haben:

3

+.-

<<

( '7

&

& ('7 $

0(

7 $

beschreibt Listen mit Elementen vom Typ 7 :-) Der Typ ist eine Typ-Variable:

bezeichnet eine leere Liste für beliebige Element-Typen :-))

(24)

Achtung:

Alle Elemente müssen den gleichen Typ haben:

3

+.-

<<

( '7

&

& ('7 $

0(

7 $

beschreibt Listen mit Elementen vom Typ 7 :-) Der Typ ist eine Typ-Variable:

bezeichnet eine leere Liste für beliebige Element-Typen :-))

(25)

Pattern Matching auf Listen:

3

;( )

$

)

,<<

&

Referenzen

ÄHNLICHE DOKUMENTE

Les projets suivants du niveau 5 (graphique 8), figurent au programme de construction des routes 2011 – 2013, bien qu’ils n’aient pas encore fait l’objet d’une évaluation de la

Falls notwendig, formen Sie zunächst den Funktionsterm um.. Leiten Sie

Die Schranken der Existenzvariablen x und z müssen in das Ungleichungssystem

Könnten wir die Typen für alle Variablen-Vorkommen raten, ließe sich mithilfe der Regeln überprüfen, dass unsere Wahl korrekt war :-).. Wie raten wir die Typen der Variablen ???.. , x

Se al proiettore è collegato più di un apparecchio esterno, utilizzare il pulsante [Source] sul pannello di controllo del proiettore o il pulsante [S-Video/Video] del telecomando

Se al proiettore è collegato un computer e il telecomando viene utilizzato come un mouse senza fili, questo pulsante può essere inclinato in alto, in basso, a destra e a sinistra

Potrebbe essere necessario acquistare un adattatore separato per collegare il computer al proiettore, a seconda della forma della porta monitor del computer. Fare riferimento

The objective of this study was to quantify the methane emission over the full course of the “active” season from early spring to early winter, to analyze the