• Keine Ergebnisse gefunden

7.2 Imperative Features im Ocaml

N/A
N/A
Protected

Academic year: 2022

Aktie "7.2 Imperative Features im Ocaml"

Copied!
21
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Der Programmierer kann selbst Exceptions auslösen.

Das geht mit dem Schlüsselwort ...

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

#$&% '()*'+,-.

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

Eine Exception ist ein Fehlerwert, der jeden Ausdruck ersetzen kann.

Bei Behandlung wird sie durch einen anderen Ausdruck (vom richtigen Typ) ersetzt — oder durch eine andere Exception ;-)

(2)

Exception Handling kann nach jedem beliebigen Teilausdruck, auch geschachtelt, stattfinden:

)

)

)

)

)

)

& #$&% '()*'+,-.

. #$&% () +,-.

& .',',

&

. &

.- ! &

! &

.- ! #$&% () +,-.

! &

(3)

7.2 Imperative Features im Ocaml

Gelegentlich möchte man Werte destruktiv verändern ;-) Dazu benötigen wir neue Konzepte ...

Modifizierbare Record-Komponenten:

• Records fassen benamte Werte zusammen ;-)

• Einzelne Komponenten können als modifizierbar deklariert werden ...

)

- ! &

. ( %.

0!

)

- ! &

. ( %.

!

(4)

-

%.

%.

!

-

%.

/ %.

!

/ %.

!

&

/ %.

!

• Modifizierbare Komponenten werden mit . ( gekennzeichnet.

• Die Initialisierung erfolgt wie bei einer normalen Komponente.

• Der Ausdruck / %. hat den Wert , aber modifiziert die Komponente %. als Seiteneffekt !!!

(5)

-

%.

%.

!

-

%.

/ %.

!

/ %.

!

&

/ %.

!

• Modifizierbare Komponenten werden mit . ( gekennzeichnet.

• Die Initialisierung erfolgt wie bei einer normalen Komponente.

• Der Ausdruck / %. hat den Wert , aber modifiziert die Komponente %. als Seiteneffekt !!!

(6)

Spezialfall: Referenzen

Eine Referenz . . auf einen Typ . ist ein Record mit der einzigen Komponente . ( * ! . :

.,'

*

.

%. .,' ! & .

*

.

.,'

.

%. .,' ! .

*

Deshalb kann man auf den Wert einer Referenz mit Selektion zugreifen:

.,' 0/

*

! &

.

.,' /

*

!

(7)

Spezialfall: Referenzen

Eine Referenz . . auf einen Typ . ist ein Record mit der einzigen Komponente . ( * ! . :

.,'

*

.

%. .,' ! & .

*

.

.,'

.

%. .,' ! .

*

Deshalb kann man auf den Wert einer Referenz mit Selektion zugreifen:

.,' 0/

*

! &

.

.,' /

*

!

(8)

Eine andere Möglichkeit ist der Dereferenzierungs-Operator :

.,'

! &

.

Der Wert, auf den eine Referenz zeigt, kann mit oder mit ! verändert werden:

.,' /

*

!

&

.,' ! 0

!

&

(9)

Eine andere Möglichkeit ist der Dereferenzierungs-Operator :

.,'

! &

.

Der Wert, auf den eine Referenz zeigt, kann mit oder mit ! verändert werden:

.,' /

*

!

&

.,' ! 0

!

&

(10)

Gleichheit von Referenzen

Das Setzen von .,' mittels ! erfolgt als Seiteneffekt und hat keinen Wert, d.h. ergibt .

!

! .

&

Zwei Referenzen sind gleich, wenn sie auf den gleichen Wert zeigen:

.

)

.

%.

! .

*

%. ) ! .

*

)

! (

(11)

Sequenzen

Bei Updates kommt es nur auf den Seiteneffekt an :-) Bei Seiteneffekten kommt es auf die Reihenfolge an :-)

Mehrere solche Aktionen kann man mit dem Sequenz-Operator hintereinander ausführen:

.,' !

.,' ! .,'

.,'

! .

*

In Ocaml kann man sogar Schleifen programmieren ...

(12)

.

%.

! .

*

!

!

&

! .

*

Ein wichtiges Listenfunktional ist & / &*- :

.

&*-

!!

&*-

%. &*- !

&

&

&

(13)

.

%.

! .

*

!

!

&

! .

*

Ein wichtiges Listenfunktional ist & / &*- :

.

&*-

!!

&*-

%. &*- !

&

&

&

(14)

Arrays und Strings

Ein Array ist ein Record fester Länge, auf dessen modifizierbare Elemente mithilfe ihres Index in konstanter Zeit zugegriffen wird:

0

%. ! -)

0

/

*

!

Zugriff außerhalb der Array-Grenzen löst eine Exception aus:

/

$

%. ' (

(15)

Ein Array kann aus einer Liste oder als Wertetabelle einer Funktion erzeugt werden ...

-) / ,' &

! -)

-) / &

$

! -)

... und wieder zurück in eine Liste transformiert werden:

-) / , '-

!!

! &

(16)

Modifizierung der Array-Einträge funktioniert analog der Modifizierung von Record-Komponenten:

/

!

&

! -)

/ *

"!

%. ' (

/

(17)

Ähnlich kann man auch Strings manipulieren :-)

&

.

%. & ! &

.

& /

!

& /

!

&

&

! &

.

Für Arrays und Strings gibt es übrigens auch die Funktionen und - (und weitere :-).

(18)

7.3 Textuelle Ein- und Ausgabe

• Selbstverständlich kann man in Ocaml auf den Standard-Output schreiben:

*',& * -

* -

!

&

• Analog gibt es eine Funktion: . ' ! & &

...

. '

* -

! * -

(19)

Um aus einer Datei zu lesen, muss man diese zum Lesen öffnen ...

', *,&

%. ! '

( &

*'

! #$ , + . , - #*-*, ///

*'

"!

','

Gibt es keine weitere Zeile, wird die Exception ',' geworfen :-)

Benötigt man einen Kanal nicht mehr, sollte man ihn geregelt schließen ...

,',

!

&

(20)

Weitere nützliche Funktionen:

& ! '

*'

! '

'

' ! '

! '

&

'

'

liefert die Gesamtlänge der Datei.

(

liest aus einem Kanal

Zeichen und schreibt sie ab Position in den String ( :-)

(21)

Die Ausgabe in Dateien erfolgt ganz analog ...

'

*,&

%.

!

*'

( &

*',&

*

!

&

*',&

-

!

&

///

Die einzeln geschriebenen Wörter sind mit Sicherheit in der Datei erst zu finden, wenn der Kanal geregelt geschlossen wurde ...

,'

!

&

Referenzen

ÄHNLICHE DOKUMENTE

(a) Schreiben Sie eine FunktionIntApprox schleife(f, a, b, N), welche mit Hilfe der linken Rechtecksregel (1) das Integral von f mittels einer Schleife n¨ aherungsweise berechnet

Diese Aufgabe kann auch durch den direkten Einsatz des Invarianzprinzips – ohne Gebrauch eines Hilfsmittels gelöst werden. Es genügt die konstante Differenz der Geschwindigkeiten

Mathematik Länge des Lineals; Längenvergleiche; Körpermaße; Strecken zeichnen, messen und schätzen (mit Repräsentanten verglei- chen); Diagramme; Körpergröße vergleichen; Länge

Bei Behandlung wird sie durch einen anderen Ausdruck (vom richtigen Typ) ersetzt — oder durch eine andere Exception ;-).. 4.2 Imperative Features im Ocaml. Gelegentlich möchte man

• Für die Initialisierung des Arrays ount iterieren wir einmal über alle Knoten und für jeden Knoten einmal über alle..

Formulieren Sie dazu auch jeweils Teilgleichungen für die Oxidation und Reduktion... Schreiben Sie für folgende Umsetzungen stöchiometrisch korrekte Reaktions-

Zeigen Sie unter Berücksichtigung der beiden folgenden Reaktionen für E = O und E = S, dass die Bildung zweiatomiger Moleküle für Sauerstoff, für Schwefel jedoch die

Die Elektrolyse von Natriumchlorid wird technisch sowohl in der Schmelze als auch in wässriger Lösung durchgeführt. Formulieren Sie für beide Prozesse Elektrodenreaktionen