Einführung in die Funktionale...

290
Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtig Einführung in die Funktionale Programmierung Am Beispiel von OCaml Michael Dienert Walther-Rathenau-Gewerbeschule Freiburg 12. Oktober 2018

Transcript of Einführung in die Funktionale...

Page 1: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Einführung in die FunktionaleProgrammierung

Am Beispiel von OCaml

Michael Dienert

Walther-Rathenau-GewerbeschuleFreiburg

12. Oktober 2018

Page 2: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Inhalt

Welche funktionale Sprache wählen wir?

Einführung: wo liegt der Unterschied zur imperativenProgrammierung

Recursion

Wichtige Eigenschaften von OCaml

Page 3: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Welche funktionale Sprache soll ich lernen?Eine kleine Auswahl an funktionalen Sprachen:

Lisp : Lisp ist die zweitälteste Hochsprache (1958), dieheute noch verwendet wird und Bedeutung hat(nach FORTRAN)

Scheme : Scheme ist ein Lisp-Dialekt und wird vor allemam MIT (Massachusetts Institute of Technology ) inder Lehre benutzt. Das zugehörige Lehrbuch(Structure and Interpretation of ComputerPrograms) ist frei verfügbar, somit eignet sichScheme sehr gut um funktionales Programmierenzu erlernen.

Haskell: Haskell ist eine strikt funktionale Sprache, was siefür den Einsteiger weniger geeignet macht. Z.B.sind IO-Operationen immer mit einer Zuweisungverbunden und damit rein funktional nichtdarstellbar.

Page 4: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Welche funktionale Sprache soll ich lernen?Eine kleine Auswahl an funktionalen Sprachen:

Lisp : Lisp ist die zweitälteste Hochsprache (1958), dieheute noch verwendet wird und Bedeutung hat(nach FORTRAN)

Scheme : Scheme ist ein Lisp-Dialekt und wird vor allemam MIT (Massachusetts Institute of Technology ) inder Lehre benutzt. Das zugehörige Lehrbuch(Structure and Interpretation of ComputerPrograms) ist frei verfügbar, somit eignet sichScheme sehr gut um funktionales Programmierenzu erlernen.

Haskell: Haskell ist eine strikt funktionale Sprache, was siefür den Einsteiger weniger geeignet macht. Z.B.sind IO-Operationen immer mit einer Zuweisungverbunden und damit rein funktional nichtdarstellbar.

Page 5: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Welche funktionale Sprache soll ich lernen?Eine kleine Auswahl an funktionalen Sprachen:

Lisp : Lisp ist die zweitälteste Hochsprache (1958), dieheute noch verwendet wird und Bedeutung hat(nach FORTRAN)

Scheme : Scheme ist ein Lisp-Dialekt und wird vor allemam MIT (Massachusetts Institute of Technology ) inder Lehre benutzt. Das zugehörige Lehrbuch(Structure and Interpretation of ComputerPrograms) ist frei verfügbar, somit eignet sichScheme sehr gut um funktionales Programmierenzu erlernen.

Haskell: Haskell ist eine strikt funktionale Sprache, was siefür den Einsteiger weniger geeignet macht. Z.B.sind IO-Operationen immer mit einer Zuweisungverbunden und damit rein funktional nichtdarstellbar.

Page 6: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Welche funktionale Sprache soll ich lernen?Eine kleine Auswahl an funktionalen Sprachen:

Lisp : Lisp ist die zweitälteste Hochsprache (1958), dieheute noch verwendet wird und Bedeutung hat(nach FORTRAN)

Scheme : Scheme ist ein Lisp-Dialekt und wird vor allemam MIT (Massachusetts Institute of Technology ) inder Lehre benutzt. Das zugehörige Lehrbuch(Structure and Interpretation of ComputerPrograms) ist frei verfügbar, somit eignet sichScheme sehr gut um funktionales Programmierenzu erlernen.

Haskell: Haskell ist eine strikt funktionale Sprache, was siefür den Einsteiger weniger geeignet macht. Z.B.sind IO-Operationen immer mit einer Zuweisungverbunden und damit rein funktional nichtdarstellbar.

Page 7: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Welche funktionale Sprache soll ich lernen?Eine kleine Auswahl an funktionalen Sprachen:

Lisp : Lisp ist die zweitälteste Hochsprache (1958), dieheute noch verwendet wird und Bedeutung hat(nach FORTRAN)

Scheme : Scheme ist ein Lisp-Dialekt und wird vor allemam MIT (Massachusetts Institute of Technology ) inder Lehre benutzt. Das zugehörige Lehrbuch(Structure and Interpretation of ComputerPrograms) ist frei verfügbar, somit eignet sichScheme sehr gut um funktionales Programmierenzu erlernen.

Haskell: Haskell ist eine strikt funktionale Sprache, was siefür den Einsteiger weniger geeignet macht. Z.B.sind IO-Operationen immer mit einer Zuweisungverbunden und damit rein funktional nichtdarstellbar.

Page 8: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Welche funktionale Sprache soll ich lernen?Eine kleine Auswahl an funktionalen Sprachen:

Lisp : Lisp ist die zweitälteste Hochsprache (1958), dieheute noch verwendet wird und Bedeutung hat(nach FORTRAN)

Scheme : Scheme ist ein Lisp-Dialekt und wird vor allemam MIT (Massachusetts Institute of Technology ) inder Lehre benutzt. Das zugehörige Lehrbuch(Structure and Interpretation of ComputerPrograms) ist frei verfügbar, somit eignet sichScheme sehr gut um funktionales Programmierenzu erlernen.

Haskell: Haskell ist eine strikt funktionale Sprache, was siefür den Einsteiger weniger geeignet macht. Z.B.sind IO-Operationen immer mit einer Zuweisungverbunden und damit rein funktional nichtdarstellbar.

Page 9: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Welche funktionale Sprache soll ich lernen?Eine kleine Auswahl an funktionalen Sprachen:

Lisp : Lisp ist die zweitälteste Hochsprache (1958), dieheute noch verwendet wird und Bedeutung hat(nach FORTRAN)

Scheme : Scheme ist ein Lisp-Dialekt und wird vor allemam MIT (Massachusetts Institute of Technology ) inder Lehre benutzt. Das zugehörige Lehrbuch(Structure and Interpretation of ComputerPrograms) ist frei verfügbar, somit eignet sichScheme sehr gut um funktionales Programmierenzu erlernen.

Haskell: Haskell ist eine strikt funktionale Sprache, was siefür den Einsteiger weniger geeignet macht. Z.B.sind IO-Operationen immer mit einer Zuweisungverbunden und damit rein funktional nichtdarstellbar.

Page 10: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Welche funktionale Sprache soll ich lernen?

Weitere funktionale Sprachen:OCaml: OCaml hat neben funktionalen auch imperative

Eigenschaften. OCaml wird vom französchischenInstitut national de recherche en informatique eten automatique (INRIA) entwickelt.

F#: F# ist stark von OCaml beeinflusst. Man sollteilweise sogar OCaml-Code mit dem F#-Compilerübersetzen können. Da die Entwicklung von F#aber von Mordor aus gesteuert wird, scheidet esfür uns aus und wir wählen OCaml.

Zugegeben, die Bedeutung von OCaml geht nach einem Hype so umca. 2005 herum zurück. Aber hier geht es um den Einstieg in diefunktionale Programmierung, Scheme darf ich nicht nehmen, unddann beleibt immer noch die F#-Option, für die, die ihre Seeleverkaufen wollen.

Page 11: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Welche funktionale Sprache soll ich lernen?

Weitere funktionale Sprachen:OCaml: OCaml hat neben funktionalen auch imperative

Eigenschaften. OCaml wird vom französchischenInstitut national de recherche en informatique eten automatique (INRIA) entwickelt.

F#: F# ist stark von OCaml beeinflusst. Man sollteilweise sogar OCaml-Code mit dem F#-Compilerübersetzen können. Da die Entwicklung von F#aber von Mordor aus gesteuert wird, scheidet esfür uns aus und wir wählen OCaml.

Zugegeben, die Bedeutung von OCaml geht nach einem Hype so umca. 2005 herum zurück. Aber hier geht es um den Einstieg in diefunktionale Programmierung, Scheme darf ich nicht nehmen, unddann beleibt immer noch die F#-Option, für die, die ihre Seeleverkaufen wollen.

Page 12: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Welche funktionale Sprache soll ich lernen?

Weitere funktionale Sprachen:OCaml: OCaml hat neben funktionalen auch imperative

Eigenschaften. OCaml wird vom französchischenInstitut national de recherche en informatique eten automatique (INRIA) entwickelt.

F#: F# ist stark von OCaml beeinflusst. Man sollteilweise sogar OCaml-Code mit dem F#-Compilerübersetzen können. Da die Entwicklung von F#aber von Mordor aus gesteuert wird, scheidet esfür uns aus und wir wählen OCaml.

Zugegeben, die Bedeutung von OCaml geht nach einem Hype so umca. 2005 herum zurück. Aber hier geht es um den Einstieg in diefunktionale Programmierung, Scheme darf ich nicht nehmen, unddann beleibt immer noch die F#-Option, für die, die ihre Seeleverkaufen wollen.

Page 13: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Welche funktionale Sprache soll ich lernen?

Weitere funktionale Sprachen:OCaml: OCaml hat neben funktionalen auch imperative

Eigenschaften. OCaml wird vom französchischenInstitut national de recherche en informatique eten automatique (INRIA) entwickelt.

F#: F# ist stark von OCaml beeinflusst. Man sollteilweise sogar OCaml-Code mit dem F#-Compilerübersetzen können. Da die Entwicklung von F#aber von Mordor aus gesteuert wird, scheidet esfür uns aus und wir wählen OCaml.

Zugegeben, die Bedeutung von OCaml geht nach einem Hype so umca. 2005 herum zurück. Aber hier geht es um den Einstieg in diefunktionale Programmierung, Scheme darf ich nicht nehmen, unddann beleibt immer noch die F#-Option, für die, die ihre Seeleverkaufen wollen.

Page 14: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Welche funktionale Sprache soll ich lernen?

Weitere funktionale Sprachen:OCaml: OCaml hat neben funktionalen auch imperative

Eigenschaften. OCaml wird vom französchischenInstitut national de recherche en informatique eten automatique (INRIA) entwickelt.

F#: F# ist stark von OCaml beeinflusst. Man sollteilweise sogar OCaml-Code mit dem F#-Compilerübersetzen können. Da die Entwicklung von F#aber von Mordor aus gesteuert wird, scheidet esfür uns aus und wir wählen OCaml.

Zugegeben, die Bedeutung von OCaml geht nach einem Hype so umca. 2005 herum zurück. Aber hier geht es um den Einstieg in diefunktionale Programmierung, Scheme darf ich nicht nehmen, unddann beleibt immer noch die F#-Option, für die, die ihre Seeleverkaufen wollen.

Page 15: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Welche funktionale Sprache soll ich lernen?

Weitere funktionale Sprachen:OCaml: OCaml hat neben funktionalen auch imperative

Eigenschaften. OCaml wird vom französchischenInstitut national de recherche en informatique eten automatique (INRIA) entwickelt.

F#: F# ist stark von OCaml beeinflusst. Man sollteilweise sogar OCaml-Code mit dem F#-Compilerübersetzen können. Da die Entwicklung von F#aber von Mordor aus gesteuert wird, scheidet esfür uns aus und wir wählen OCaml.

Zugegeben, die Bedeutung von OCaml geht nach einem Hype so umca. 2005 herum zurück. Aber hier geht es um den Einstieg in diefunktionale Programmierung, Scheme darf ich nicht nehmen, unddann beleibt immer noch die F#-Option, für die, die ihre Seeleverkaufen wollen.

Page 16: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Inhalt

Welche funktionale Sprache wählen wir?

Einführung: wo liegt der Unterschied zur imperativenProgrammierung

Recursion

Wichtige Eigenschaften von OCaml

Page 17: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Imperative Programmierung orientiert sich an derFunktionsweise der CPU ⇒ Speichermodell, Rechenwerk,Ein- / Ausgabe. Beispiele: C, C++, Java, Pascal, Fortran,Algol, ...

Variablen sind nichts anderes als gut lesbare Namen fürSpeicheradressen

Kontrollstrukturen bringen die jmp-Befehle desProzessors in eine für Menschen lesbareForm.

Funktionen oder Methoden sind nichts anderes alsUnterprogramme, zu denen dasHauptprogramm mit jmp-Befehlen verzweigt.

Page 18: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Imperative Programmierung orientiert sich an derFunktionsweise der CPU ⇒ Speichermodell, Rechenwerk,Ein- / Ausgabe. Beispiele: C, C++, Java, Pascal, Fortran,Algol, ...

Variablen sind nichts anderes als gut lesbare Namen fürSpeicheradressen

Kontrollstrukturen bringen die jmp-Befehle desProzessors in eine für Menschen lesbareForm.

Funktionen oder Methoden sind nichts anderes alsUnterprogramme, zu denen dasHauptprogramm mit jmp-Befehlen verzweigt.

Page 19: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Imperative Programmierung orientiert sich an derFunktionsweise der CPU ⇒ Speichermodell, Rechenwerk,Ein- / Ausgabe. Beispiele: C, C++, Java, Pascal, Fortran,Algol, ...

Variablen sind nichts anderes als gut lesbare Namen fürSpeicheradressen

Kontrollstrukturen bringen die jmp-Befehle desProzessors in eine für Menschen lesbareForm.

Funktionen oder Methoden sind nichts anderes alsUnterprogramme, zu denen dasHauptprogramm mit jmp-Befehlen verzweigt.

Page 20: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Imperative Programmierung orientiert sich an derFunktionsweise der CPU ⇒ Speichermodell, Rechenwerk,Ein- / Ausgabe. Beispiele: C, C++, Java, Pascal, Fortran,Algol, ...

Variablen sind nichts anderes als gut lesbare Namen fürSpeicheradressen

Kontrollstrukturen bringen die jmp-Befehle desProzessors in eine für Menschen lesbareForm.

Funktionen oder Methoden sind nichts anderes alsUnterprogramme, zu denen dasHauptprogramm mit jmp-Befehlen verzweigt.

Page 21: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Imperative Programmierung orientiert sich an derFunktionsweise der CPU ⇒ Speichermodell, Rechenwerk,Ein- / Ausgabe. Beispiele: C, C++, Java, Pascal, Fortran,Algol, ...

Variablen sind nichts anderes als gut lesbare Namen fürSpeicheradressen

Kontrollstrukturen bringen die jmp-Befehle desProzessors in eine für Menschen lesbareForm.

Funktionen oder Methoden sind nichts anderes alsUnterprogramme, zu denen dasHauptprogramm mit jmp-Befehlen verzweigt.

Page 22: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Imperative Programmierung orientiert sich an derFunktionsweise der CPU ⇒ Speichermodell, Rechenwerk,Ein- / Ausgabe. Beispiele: C, C++, Java, Pascal, Fortran,Algol, ...

Variablen sind nichts anderes als gut lesbare Namen fürSpeicheradressen

Kontrollstrukturen bringen die jmp-Befehle desProzessors in eine für Menschen lesbareForm.

Funktionen oder Methoden sind nichts anderes alsUnterprogramme, zu denen dasHauptprogramm mit jmp-Befehlen verzweigt.

Page 23: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Imperative Programmierung orientiert sich an derFunktionsweise der CPU ⇒ Speichermodell, Rechenwerk,Ein- / Ausgabe. Beispiele: C, C++, Java, Pascal, Fortran,Algol, ...

Variablen sind nichts anderes als gut lesbare Namen fürSpeicheradressen

Kontrollstrukturen bringen die jmp-Befehle desProzessors in eine für Menschen lesbareForm.

Funktionen oder Methoden sind nichts anderes alsUnterprogramme, zu denen dasHauptprogramm mit jmp-Befehlen verzweigt.

Page 24: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Imperative Programmierung orientiert sich an derFunktionsweise der CPU ⇒ Speichermodell, Rechenwerk,Ein- / Ausgabe. Beispiele: C, C++, Java, Pascal, Fortran,Algol, ...

Variablen sind nichts anderes als gut lesbare Namen fürSpeicheradressen

Kontrollstrukturen bringen die jmp-Befehle desProzessors in eine für Menschen lesbareForm.

Funktionen oder Methoden sind nichts anderes alsUnterprogramme, zu denen dasHauptprogramm mit jmp-Befehlen verzweigt.

Page 25: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Algorithmen werden mit Kontrollstrukturen undAnweisungen (z.B. i=i+1;) formuliert

• Die Anweisungen können globale und lokale Variablen unddamit den Maschinenzustand ändern.

• Problem: der Maschinenzustand hängt von derReihenfolge der Ausführung und den Ausgangswerten derVariablen ab

• Bei komplexen Algorithmen ist es so gut wie unmöglichvorherzusagen, ob ein ungewollter Maschinenzustandauftreten kann.

Page 26: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Algorithmen werden mit Kontrollstrukturen undAnweisungen (z.B. i=i+1;) formuliert

• Die Anweisungen können globale und lokale Variablen unddamit den Maschinenzustand ändern.

• Problem: der Maschinenzustand hängt von derReihenfolge der Ausführung und den Ausgangswerten derVariablen ab

• Bei komplexen Algorithmen ist es so gut wie unmöglichvorherzusagen, ob ein ungewollter Maschinenzustandauftreten kann.

Page 27: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Algorithmen werden mit Kontrollstrukturen undAnweisungen (z.B. i=i+1;) formuliert

• Die Anweisungen können globale und lokale Variablen unddamit den Maschinenzustand ändern.

• Problem: der Maschinenzustand hängt von derReihenfolge der Ausführung und den Ausgangswerten derVariablen ab

• Bei komplexen Algorithmen ist es so gut wie unmöglichvorherzusagen, ob ein ungewollter Maschinenzustandauftreten kann.

Page 28: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Algorithmen werden mit Kontrollstrukturen undAnweisungen (z.B. i=i+1;) formuliert

• Die Anweisungen können globale und lokale Variablen unddamit den Maschinenzustand ändern.

• Problem: der Maschinenzustand hängt von derReihenfolge der Ausführung und den Ausgangswerten derVariablen ab

• Bei komplexen Algorithmen ist es so gut wie unmöglichvorherzusagen, ob ein ungewollter Maschinenzustandauftreten kann.

Page 29: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Algorithmen werden mit Kontrollstrukturen undAnweisungen (z.B. i=i+1;) formuliert

• Die Anweisungen können globale und lokale Variablen unddamit den Maschinenzustand ändern.

• Problem: der Maschinenzustand hängt von derReihenfolge der Ausführung und den Ausgangswerten derVariablen ab

• Bei komplexen Algorithmen ist es so gut wie unmöglichvorherzusagen, ob ein ungewollter Maschinenzustandauftreten kann.

Page 30: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Algorithmen werden mit Kontrollstrukturen undAnweisungen (z.B. i=i+1;) formuliert

• Die Anweisungen können globale und lokale Variablen unddamit den Maschinenzustand ändern.

• Problem: der Maschinenzustand hängt von derReihenfolge der Ausführung und den Ausgangswerten derVariablen ab

• Bei komplexen Algorithmen ist es so gut wie unmöglichvorherzusagen, ob ein ungewollter Maschinenzustandauftreten kann.

Page 31: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Algorithmen werden mit Kontrollstrukturen undAnweisungen (z.B. i=i+1;) formuliert

• Die Anweisungen können globale und lokale Variablen unddamit den Maschinenzustand ändern.

• Problem: der Maschinenzustand hängt von derReihenfolge der Ausführung und den Ausgangswerten derVariablen ab

• Bei komplexen Algorithmen ist es so gut wie unmöglichvorherzusagen, ob ein ungewollter Maschinenzustandauftreten kann.

Page 32: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Algorithmen werden mit Kontrollstrukturen undAnweisungen (z.B. i=i+1;) formuliert

• Die Anweisungen können globale und lokale Variablen unddamit den Maschinenzustand ändern.

• Problem: der Maschinenzustand hängt von derReihenfolge der Ausführung und den Ausgangswerten derVariablen ab

• Bei komplexen Algorithmen ist es so gut wie unmöglichvorherzusagen, ob ein ungewollter Maschinenzustandauftreten kann.

Page 33: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Algorithmen werden mit Kontrollstrukturen undAnweisungen (z.B. i=i+1;) formuliert

• Die Anweisungen können globale und lokale Variablen unddamit den Maschinenzustand ändern.

• Problem: der Maschinenzustand hängt von derReihenfolge der Ausführung und den Ausgangswerten derVariablen ab

• Bei komplexen Algorithmen ist es so gut wie unmöglichvorherzusagen, ob ein ungewollter Maschinenzustandauftreten kann.

Page 34: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Imperative Programmierung

• Algorithmen werden mit Kontrollstrukturen undAnweisungen (z.B. i=i+1;) formuliert

• Die Anweisungen können globale und lokale Variablen unddamit den Maschinenzustand ändern.

• Problem: der Maschinenzustand hängt von derReihenfolge der Ausführung und den Ausgangswerten derVariablen ab

• Bei komplexen Algorithmen ist es so gut wie unmöglichvorherzusagen, ob ein ungewollter Maschinenzustandauftreten kann.

Page 35: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die funktionale Programmierung orientiert sich ammathematischen Funktionsbegriff

Funktion: eine Funktion ordnet jedem Element derDefinitionsmenge D genau ein Element derErgebnismenge Z zu.

• Die Algorithmen einer funktionalen Programmiersprachebasieren auf Ausdrücken, die ausgewertet werden.

• Ein Ausdruck ist eine Kombination von Funktionen,Operatoren und Werten, die einen Wert zurückliefern, alsoausgewertet werden können. Beispiele:

• 16 + 3 * 8• sqrt 2.0• 2 < 3• 2.0 > 3.0• 2 + sum 3 4

Page 36: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die funktionale Programmierung orientiert sich ammathematischen Funktionsbegriff

Funktion: eine Funktion ordnet jedem Element derDefinitionsmenge D genau ein Element derErgebnismenge Z zu.

• Die Algorithmen einer funktionalen Programmiersprachebasieren auf Ausdrücken, die ausgewertet werden.

• Ein Ausdruck ist eine Kombination von Funktionen,Operatoren und Werten, die einen Wert zurückliefern, alsoausgewertet werden können. Beispiele:

• 16 + 3 * 8• sqrt 2.0• 2 < 3• 2.0 > 3.0• 2 + sum 3 4

Page 37: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die funktionale Programmierung orientiert sich ammathematischen Funktionsbegriff

Funktion: eine Funktion ordnet jedem Element derDefinitionsmenge D genau ein Element derErgebnismenge Z zu.

• Die Algorithmen einer funktionalen Programmiersprachebasieren auf Ausdrücken, die ausgewertet werden.

• Ein Ausdruck ist eine Kombination von Funktionen,Operatoren und Werten, die einen Wert zurückliefern, alsoausgewertet werden können. Beispiele:

• 16 + 3 * 8• sqrt 2.0• 2 < 3• 2.0 > 3.0• 2 + sum 3 4

Page 38: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die funktionale Programmierung orientiert sich ammathematischen Funktionsbegriff

Funktion: eine Funktion ordnet jedem Element derDefinitionsmenge D genau ein Element derErgebnismenge Z zu.

• Die Algorithmen einer funktionalen Programmiersprachebasieren auf Ausdrücken, die ausgewertet werden.

• Ein Ausdruck ist eine Kombination von Funktionen,Operatoren und Werten, die einen Wert zurückliefern, alsoausgewertet werden können. Beispiele:

• 16 + 3 * 8• sqrt 2.0• 2 < 3• 2.0 > 3.0• 2 + sum 3 4

Page 39: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die funktionale Programmierung orientiert sich ammathematischen Funktionsbegriff

Funktion: eine Funktion ordnet jedem Element derDefinitionsmenge D genau ein Element derErgebnismenge Z zu.

• Die Algorithmen einer funktionalen Programmiersprachebasieren auf Ausdrücken, die ausgewertet werden.

• Ein Ausdruck ist eine Kombination von Funktionen,Operatoren und Werten, die einen Wert zurückliefern, alsoausgewertet werden können. Beispiele:

• 16 + 3 * 8• sqrt 2.0• 2 < 3• 2.0 > 3.0• 2 + sum 3 4

Page 40: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die funktionale Programmierung orientiert sich ammathematischen Funktionsbegriff

Funktion: eine Funktion ordnet jedem Element derDefinitionsmenge D genau ein Element derErgebnismenge Z zu.

• Die Algorithmen einer funktionalen Programmiersprachebasieren auf Ausdrücken, die ausgewertet werden.

• Ein Ausdruck ist eine Kombination von Funktionen,Operatoren und Werten, die einen Wert zurückliefern, alsoausgewertet werden können. Beispiele:

• 16 + 3 * 8• sqrt 2.0• 2 < 3• 2.0 > 3.0• 2 + sum 3 4

Page 41: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die funktionale Programmierung orientiert sich ammathematischen Funktionsbegriff

Funktion: eine Funktion ordnet jedem Element derDefinitionsmenge D genau ein Element derErgebnismenge Z zu.

• Die Algorithmen einer funktionalen Programmiersprachebasieren auf Ausdrücken, die ausgewertet werden.

• Ein Ausdruck ist eine Kombination von Funktionen,Operatoren und Werten, die einen Wert zurückliefern, alsoausgewertet werden können. Beispiele:

• 16 + 3 * 8• sqrt 2.0• 2 < 3• 2.0 > 3.0• 2 + sum 3 4

Page 42: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die funktionale Programmierung orientiert sich ammathematischen Funktionsbegriff

Funktion: eine Funktion ordnet jedem Element derDefinitionsmenge D genau ein Element derErgebnismenge Z zu.

• Die Algorithmen einer funktionalen Programmiersprachebasieren auf Ausdrücken, die ausgewertet werden.

• Ein Ausdruck ist eine Kombination von Funktionen,Operatoren und Werten, die einen Wert zurückliefern, alsoausgewertet werden können. Beispiele:

• 16 + 3 * 8• sqrt 2.0• 2 < 3• 2.0 > 3.0• 2 + sum 3 4

Page 43: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die funktionale Programmierung orientiert sich ammathematischen Funktionsbegriff

Funktion: eine Funktion ordnet jedem Element derDefinitionsmenge D genau ein Element derErgebnismenge Z zu.

• Die Algorithmen einer funktionalen Programmiersprachebasieren auf Ausdrücken, die ausgewertet werden.

• Ein Ausdruck ist eine Kombination von Funktionen,Operatoren und Werten, die einen Wert zurückliefern, alsoausgewertet werden können. Beispiele:

• 16 + 3 * 8• sqrt 2.0• 2 < 3• 2.0 > 3.0• 2 + sum 3 4

Page 44: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die funktionale Programmierung orientiert sich ammathematischen Funktionsbegriff

Funktion: eine Funktion ordnet jedem Element derDefinitionsmenge D genau ein Element derErgebnismenge Z zu.

• Die Algorithmen einer funktionalen Programmiersprachebasieren auf Ausdrücken, die ausgewertet werden.

• Ein Ausdruck ist eine Kombination von Funktionen,Operatoren und Werten, die einen Wert zurückliefern, alsoausgewertet werden können. Beispiele:

• 16 + 3 * 8• sqrt 2.0• 2 < 3• 2.0 > 3.0• 2 + sum 3 4

Page 45: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die Variablen einer funktionalen Programmiersprachebezeichnen Werte und keine Speicheradressen!⇒ Es gibt keine Zuweisung!!!

• Es erfolgt kein Ablauf von Anweisungen, sondern eineAuswertung von Ausdrücken.

• Die Auswertung ist eine mathematischeGleichungsumforumung

Page 46: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die Variablen einer funktionalen Programmiersprachebezeichnen Werte und keine Speicheradressen!⇒ Es gibt keine Zuweisung!!!

• Es erfolgt kein Ablauf von Anweisungen, sondern eineAuswertung von Ausdrücken.

• Die Auswertung ist eine mathematischeGleichungsumforumung

Page 47: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die Variablen einer funktionalen Programmiersprachebezeichnen Werte und keine Speicheradressen!⇒ Es gibt keine Zuweisung!!!

• Es erfolgt kein Ablauf von Anweisungen, sondern eineAuswertung von Ausdrücken.

• Die Auswertung ist eine mathematischeGleichungsumforumung

Page 48: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die Variablen einer funktionalen Programmiersprachebezeichnen Werte und keine Speicheradressen!⇒ Es gibt keine Zuweisung!!!

• Es erfolgt kein Ablauf von Anweisungen, sondern eineAuswertung von Ausdrücken.

• Die Auswertung ist eine mathematischeGleichungsumforumung

Page 49: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die Variablen einer funktionalen Programmiersprachebezeichnen Werte und keine Speicheradressen!⇒ Es gibt keine Zuweisung!!!

• Es erfolgt kein Ablauf von Anweisungen, sondern eineAuswertung von Ausdrücken.

• Die Auswertung ist eine mathematischeGleichungsumforumung

Page 50: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung

• Die Variablen einer funktionalen Programmiersprachebezeichnen Werte und keine Speicheradressen!⇒ Es gibt keine Zuweisung!!!

• Es erfolgt kein Ablauf von Anweisungen, sondern eineAuswertung von Ausdrücken.

• Die Auswertung ist eine mathematischeGleichungsumforumung

Page 51: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 52: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 53: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 54: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 55: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 56: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 57: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 58: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 59: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 60: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 61: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 62: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 63: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 64: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 65: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 66: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 67: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung und einige OCamloperatoren

1 l e t d re i f ach ( x : f l o a t ) = 3.0 ∗ . x2 l e t i nc ( x : f l o a t ) = x +. 1.03 Anwendung :4 i nc ( d re i f ach 7.0 −. i nc 2 .0 )5 Umformung :6 i nc (3 .0 ∗ . 7.0 −. 2.0 +. 1 .0 )7 i nc (21 .0 −. 3 .0 )8 i nc ( 1 8 . 0 )9 (18 .0 +. 1 .0 )

10 19

• Kurzer erster OCaml-Syntax-Einschub: es gibt keineüberladenen Operatoren!

• es gibt Operatoren fuer Rechnen mit Integerwerten:+ , - , * , /

• und entsprechend Operatoren fuer das Rechnen mitFliesskommazahlen: +. , -. , *. , /.

Page 68: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung: Wiederholungen

• Schleifen in imperativen Programmiersprachen arbeitenmit Zuweisungen

• Da es in der funktionalen Programmierung keineZuweisungen gibt, gibt es auch keine Schleifen

• Wiederkehrende Operationen können in rein funktionalenSprachen nur mittels Rekursion gelöst werden.

Page 69: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung: Wiederholungen

• Schleifen in imperativen Programmiersprachen arbeitenmit Zuweisungen

• Da es in der funktionalen Programmierung keineZuweisungen gibt, gibt es auch keine Schleifen

• Wiederkehrende Operationen können in rein funktionalenSprachen nur mittels Rekursion gelöst werden.

Page 70: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung: Wiederholungen

• Schleifen in imperativen Programmiersprachen arbeitenmit Zuweisungen

• Da es in der funktionalen Programmierung keineZuweisungen gibt, gibt es auch keine Schleifen

• Wiederkehrende Operationen können in rein funktionalenSprachen nur mittels Rekursion gelöst werden.

Page 71: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionale Programmierung: Wiederholungen

• Schleifen in imperativen Programmiersprachen arbeitenmit Zuweisungen

• Da es in der funktionalen Programmierung keineZuweisungen gibt, gibt es auch keine Schleifen

• Wiederkehrende Operationen können in rein funktionalenSprachen nur mittels Rekursion gelöst werden.

Page 72: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Inhalt

Welche funktionale Sprache wählen wir?

Einführung: wo liegt der Unterschied zur imperativenProgrammierung

Recursion

Wichtige Eigenschaften von OCaml

Page 73: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 74: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 75: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 76: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 77: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 78: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 79: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 80: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 81: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 82: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 83: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 84: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 85: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 86: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 87: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 88: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Rekursionsbeispiel

1 l e t rec f a k u l t a e t ( n : i n t ) =2 i f n=0 | | n=1 then 13 else n ∗ f a k u l t a e t ( n−1) ; ;4 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−5 Auswertung mi t Gleichungsauf lösung6 f a k u l t a e t 37 = 3 ∗ ( f a k u l t a e t ( 2 ) )8 = 3 ∗ ( 2 ∗ ( f a k u l t a e t ( 1 ) ) )9 = 3 ∗ ( 2 ∗ ( 1 ) )

10 = 3 ∗ ( 2 ∗ 1 )11 = 3 ∗ ( 2 )12 = 3 ∗ 213 = 6

Nachteil: Speicherbedarf wächst linear mit der Anzahl anRekursionsschritten

Page 89: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 90: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 91: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 92: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 93: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 94: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 95: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 96: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 97: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 98: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 99: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 100: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 101: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 102: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 103: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 104: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 105: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 106: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 107: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel

Das Falkultätsbeispiel mit Endrekursion. Hier ist derSpeicherbedarf unabhängig von der Anzahl der Rekursionen:

1 l e t f a c u l t a e t n =2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku )5 in facHelp n 1 ; ;6 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−7 f a c u l t a e t 38 = facHelp 3 19 = facHelp (3−1) (3∗1)

10 = facHelp 2 311 = facHelp (2−1) (2∗3)12 = facHelp 1 613 = facHelp (1−1) (1∗6)14 = facHelp 0 615 = 6

Page 108: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Inhalt

Welche funktionale Sprache wählen wir?

Einführung: wo liegt der Unterschied zur imperativenProgrammierung

Recursion

Wichtige Eigenschaften von OCaml

Page 109: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen

• Funktionsaufrufe finden ohne Klammern und ohneKommas statt! Klammern sind nur notwendig, damit derCompiler Ausdrücke in der richtigen Reihenfolgeauswerten kann. Beispiel:

1 f 5 ( g " h e l l o " ) 3 (∗ f hat d r e i argumente ,g hat e in argument ∗ )

2 f ( g 3 4) (∗ f hat e in argument , ghat zwei argumente ∗ )

• Typdeklarationen: bezeichner : typ• OCaml ist streng typisiert• OCaml arbeitet mit impliziter Typisierung:

1 # l e t f a b = a +. b ; ;2 val f : f l o a t −> f l o a t −> f l o a t = <fun>

Page 110: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen

• Funktionsaufrufe finden ohne Klammern und ohneKommas statt! Klammern sind nur notwendig, damit derCompiler Ausdrücke in der richtigen Reihenfolgeauswerten kann. Beispiel:

1 f 5 ( g " h e l l o " ) 3 (∗ f hat d r e i argumente ,g hat e in argument ∗ )

2 f ( g 3 4) (∗ f hat e in argument , ghat zwei argumente ∗ )

• Typdeklarationen: bezeichner : typ• OCaml ist streng typisiert• OCaml arbeitet mit impliziter Typisierung:

1 # l e t f a b = a +. b ; ;2 val f : f l o a t −> f l o a t −> f l o a t = <fun>

Page 111: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen

• Funktionsaufrufe finden ohne Klammern und ohneKommas statt! Klammern sind nur notwendig, damit derCompiler Ausdrücke in der richtigen Reihenfolgeauswerten kann. Beispiel:

1 f 5 ( g " h e l l o " ) 3 (∗ f hat d r e i argumente ,g hat e in argument ∗ )

2 f ( g 3 4) (∗ f hat e in argument , ghat zwei argumente ∗ )

• Typdeklarationen: bezeichner : typ• OCaml ist streng typisiert• OCaml arbeitet mit impliziter Typisierung:

1 # l e t f a b = a +. b ; ;2 val f : f l o a t −> f l o a t −> f l o a t = <fun>

Page 112: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen

• Funktionsaufrufe finden ohne Klammern und ohneKommas statt! Klammern sind nur notwendig, damit derCompiler Ausdrücke in der richtigen Reihenfolgeauswerten kann. Beispiel:

1 f 5 ( g " h e l l o " ) 3 (∗ f hat d r e i argumente ,g hat e in argument ∗ )

2 f ( g 3 4) (∗ f hat e in argument , ghat zwei argumente ∗ )

• Typdeklarationen: bezeichner : typ• OCaml ist streng typisiert• OCaml arbeitet mit impliziter Typisierung:

1 # l e t f a b = a +. b ; ;2 val f : f l o a t −> f l o a t −> f l o a t = <fun>

Page 113: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen

• Funktionsaufrufe finden ohne Klammern und ohneKommas statt! Klammern sind nur notwendig, damit derCompiler Ausdrücke in der richtigen Reihenfolgeauswerten kann. Beispiel:

1 f 5 ( g " h e l l o " ) 3 (∗ f hat d r e i argumente ,g hat e in argument ∗ )

2 f ( g 3 4) (∗ f hat e in argument , ghat zwei argumente ∗ )

• Typdeklarationen: bezeichner : typ• OCaml ist streng typisiert• OCaml arbeitet mit impliziter Typisierung:

1 # l e t f a b = a +. b ; ;2 val f : f l o a t −> f l o a t −> f l o a t = <fun>

Page 114: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen

• Funktionsaufrufe finden ohne Klammern und ohneKommas statt! Klammern sind nur notwendig, damit derCompiler Ausdrücke in der richtigen Reihenfolgeauswerten kann. Beispiel:

1 f 5 ( g " h e l l o " ) 3 (∗ f hat d r e i argumente ,g hat e in argument ∗ )

2 f ( g 3 4) (∗ f hat e in argument , ghat zwei argumente ∗ )

• Typdeklarationen: bezeichner : typ• OCaml ist streng typisiert• OCaml arbeitet mit impliziter Typisierung:

1 # l e t f a b = a +. b ; ;2 val f : f l o a t −> f l o a t −> f l o a t = <fun>

Page 115: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen

• Funktionsaufrufe finden ohne Klammern und ohneKommas statt! Klammern sind nur notwendig, damit derCompiler Ausdrücke in der richtigen Reihenfolgeauswerten kann. Beispiel:

1 f 5 ( g " h e l l o " ) 3 (∗ f hat d r e i argumente ,g hat e in argument ∗ )

2 f ( g 3 4) (∗ f hat e in argument , ghat zwei argumente ∗ )

• Typdeklarationen: bezeichner : typ• OCaml ist streng typisiert• OCaml arbeitet mit impliziter Typisierung:

1 # l e t f a b = a +. b ; ;2 val f : f l o a t −> f l o a t −> f l o a t = <fun>

Page 116: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen

• Funktionsaufrufe finden ohne Klammern und ohneKommas statt! Klammern sind nur notwendig, damit derCompiler Ausdrücke in der richtigen Reihenfolgeauswerten kann. Beispiel:

1 f 5 ( g " h e l l o " ) 3 (∗ f hat d r e i argumente ,g hat e in argument ∗ )

2 f ( g 3 4) (∗ f hat e in argument , ghat zwei argumente ∗ )

• Typdeklarationen: bezeichner : typ• OCaml ist streng typisiert• OCaml arbeitet mit impliziter Typisierung:

1 # l e t f a b = a +. b ; ;2 val f : f l o a t −> f l o a t −> f l o a t = <fun>

Page 117: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen: let-Bindings

• Deklarationen müssen das Schlüsselwort letverwenden:

1 l e t name = expression

• mit let wird ein beliebiger Ausdruck an einenBezeichner gebunden. ⇒ let-Binding

• Der Bezeichner wird somit zum Aliasnamen für dengesamten Ausdruck. Überall wo im Folgenden derBezeichner steht, kann man sich den gesamten Ausdruckeingesetzt denken.

Page 118: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen: let-Bindings

• Deklarationen müssen das Schlüsselwort letverwenden:

1 l e t name = expression

• mit let wird ein beliebiger Ausdruck an einenBezeichner gebunden. ⇒ let-Binding

• Der Bezeichner wird somit zum Aliasnamen für dengesamten Ausdruck. Überall wo im Folgenden derBezeichner steht, kann man sich den gesamten Ausdruckeingesetzt denken.

Page 119: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen: let-Bindings

• Deklarationen müssen das Schlüsselwort letverwenden:

1 l e t name = expression

• mit let wird ein beliebiger Ausdruck an einenBezeichner gebunden. ⇒ let-Binding

• Der Bezeichner wird somit zum Aliasnamen für dengesamten Ausdruck. Überall wo im Folgenden derBezeichner steht, kann man sich den gesamten Ausdruckeingesetzt denken.

Page 120: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen: let-Bindings

• Deklarationen müssen das Schlüsselwort letverwenden:

1 l e t name = expression

• mit let wird ein beliebiger Ausdruck an einenBezeichner gebunden. ⇒ let-Binding

• Der Bezeichner wird somit zum Aliasnamen für dengesamten Ausdruck. Überall wo im Folgenden derBezeichner steht, kann man sich den gesamten Ausdruckeingesetzt denken.

Page 121: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen: let-Bindings

• Deklarationen müssen das Schlüsselwort letverwenden:

1 l e t name = expression

• mit let wird ein beliebiger Ausdruck an einenBezeichner gebunden. ⇒ let-Binding

• Der Bezeichner wird somit zum Aliasnamen für dengesamten Ausdruck. Überall wo im Folgenden derBezeichner steht, kann man sich den gesamten Ausdruckeingesetzt denken.

Page 122: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen: let-Bindings

• Deklarationen müssen das Schlüsselwort letverwenden:

1 l e t name = expression

• mit let wird ein beliebiger Ausdruck an einenBezeichner gebunden. ⇒ let-Binding

• Der Bezeichner wird somit zum Aliasnamen für dengesamten Ausdruck. Überall wo im Folgenden derBezeichner steht, kann man sich den gesamten Ausdruckeingesetzt denken.

Page 123: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen: let-Bindings,Fortsetzung

• Bindungen innerhalb eines Ausdrucks, also lokaleBindungen werden mit dem Schlüsselwort in deklariert:

1 l e t name = expression in . . . ; ;

Hier gilt die Bindung nur ab dem Schlüsselwort in bis zuden doppelten Strichpunkten ;;

• Eine Funktion kann erst aufgerufen werden, wenn siezuvor komplett deklariert wurde. Das geht bei rekursivenAufrufen natürlich nicht, weshalb hier mit let recgearbeitet werden muss.

Page 124: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen: let-Bindings,Fortsetzung

• Bindungen innerhalb eines Ausdrucks, also lokaleBindungen werden mit dem Schlüsselwort in deklariert:

1 l e t name = expression in . . . ; ;

Hier gilt die Bindung nur ab dem Schlüsselwort in bis zuden doppelten Strichpunkten ;;

• Eine Funktion kann erst aufgerufen werden, wenn siezuvor komplett deklariert wurde. Das geht bei rekursivenAufrufen natürlich nicht, weshalb hier mit let recgearbeitet werden muss.

Page 125: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen: let-Bindings,Fortsetzung

• Bindungen innerhalb eines Ausdrucks, also lokaleBindungen werden mit dem Schlüsselwort in deklariert:

1 l e t name = expression in . . . ; ;

Hier gilt die Bindung nur ab dem Schlüsselwort in bis zuden doppelten Strichpunkten ;;

• Eine Funktion kann erst aufgerufen werden, wenn siezuvor komplett deklariert wurde. Das geht bei rekursivenAufrufen natürlich nicht, weshalb hier mit let recgearbeitet werden muss.

Page 126: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Erklärungen zu den Beispielen: let-Bindings,Fortsetzung

• Bindungen innerhalb eines Ausdrucks, also lokaleBindungen werden mit dem Schlüsselwort in deklariert:

1 l e t name = expression in . . . ; ;

Hier gilt die Bindung nur ab dem Schlüsselwort in bis zuden doppelten Strichpunkten ;;

• Eine Funktion kann erst aufgerufen werden, wenn siezuvor komplett deklariert wurde. Das geht bei rekursivenAufrufen natürlich nicht, weshalb hier mit let recgearbeitet werden muss.

Page 127: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel ohne lokale Deklaration

Nochmals das Falkultätsbeispiel mit Endrekursion, diesmalaber ohne lokale Deklaration:

1 (∗ diesmal wi rd d ie h i l f s f u n k t i o n g loba ld e k l a r i e r t ∗ )

2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku ) ; ;5

6 l e t f a c u l t a e t n =7 facHelp n 1 ; ;8

9 f a c u l t a e t 5 ; ;

Page 128: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel ohne lokale Deklaration

Nochmals das Falkultätsbeispiel mit Endrekursion, diesmalaber ohne lokale Deklaration:

1 (∗ diesmal wi rd d ie h i l f s f u n k t i o n g loba ld e k l a r i e r t ∗ )

2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku ) ; ;5

6 l e t f a c u l t a e t n =7 facHelp n 1 ; ;8

9 f a c u l t a e t 5 ; ;

Page 129: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel ohne lokale Deklaration

Nochmals das Falkultätsbeispiel mit Endrekursion, diesmalaber ohne lokale Deklaration:

1 (∗ diesmal wi rd d ie h i l f s f u n k t i o n g loba ld e k l a r i e r t ∗ )

2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku ) ; ;5

6 l e t f a c u l t a e t n =7 facHelp n 1 ; ;8

9 f a c u l t a e t 5 ; ;

Page 130: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel ohne lokale Deklaration

Nochmals das Falkultätsbeispiel mit Endrekursion, diesmalaber ohne lokale Deklaration:

1 (∗ diesmal wi rd d ie h i l f s f u n k t i o n g loba ld e k l a r i e r t ∗ )

2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku ) ; ;5

6 l e t f a c u l t a e t n =7 facHelp n 1 ; ;8

9 f a c u l t a e t 5 ; ;

Page 131: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel ohne lokale Deklaration

Nochmals das Falkultätsbeispiel mit Endrekursion, diesmalaber ohne lokale Deklaration:

1 (∗ diesmal wi rd d ie h i l f s f u n k t i o n g loba ld e k l a r i e r t ∗ )

2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku ) ; ;5

6 l e t f a c u l t a e t n =7 facHelp n 1 ; ;8

9 f a c u l t a e t 5 ; ;

Page 132: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel ohne lokale Deklaration

Nochmals das Falkultätsbeispiel mit Endrekursion, diesmalaber ohne lokale Deklaration:

1 (∗ diesmal wi rd d ie h i l f s f u n k t i o n g loba ld e k l a r i e r t ∗ )

2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku ) ; ;5

6 l e t f a c u l t a e t n =7 facHelp n 1 ; ;8

9 f a c u l t a e t 5 ; ;

Page 133: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel ohne lokale Deklaration

Nochmals das Falkultätsbeispiel mit Endrekursion, diesmalaber ohne lokale Deklaration:

1 (∗ diesmal wi rd d ie h i l f s f u n k t i o n g loba ld e k l a r i e r t ∗ )

2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku ) ; ;5

6 l e t f a c u l t a e t n =7 facHelp n 1 ; ;8

9 f a c u l t a e t 5 ; ;

Page 134: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel ohne lokale Deklaration

Nochmals das Falkultätsbeispiel mit Endrekursion, diesmalaber ohne lokale Deklaration:

1 (∗ diesmal wi rd d ie h i l f s f u n k t i o n g loba ld e k l a r i e r t ∗ )

2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku ) ; ;5

6 l e t f a c u l t a e t n =7 facHelp n 1 ; ;8

9 f a c u l t a e t 5 ; ;

Page 135: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel ohne lokale Deklaration

Nochmals das Falkultätsbeispiel mit Endrekursion, diesmalaber ohne lokale Deklaration:

1 (∗ diesmal wi rd d ie h i l f s f u n k t i o n g loba ld e k l a r i e r t ∗ )

2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku ) ; ;5

6 l e t f a c u l t a e t n =7 facHelp n 1 ; ;8

9 f a c u l t a e t 5 ; ;

Page 136: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel ohne lokale Deklaration

Nochmals das Falkultätsbeispiel mit Endrekursion, diesmalaber ohne lokale Deklaration:

1 (∗ diesmal wi rd d ie h i l f s f u n k t i o n g loba ld e k l a r i e r t ∗ )

2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku ) ; ;5

6 l e t f a c u l t a e t n =7 facHelp n 1 ; ;8

9 f a c u l t a e t 5 ; ;

Page 137: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel ohne lokale Deklaration

Nochmals das Falkultätsbeispiel mit Endrekursion, diesmalaber ohne lokale Deklaration:

1 (∗ diesmal wi rd d ie h i l f s f u n k t i o n g loba ld e k l a r i e r t ∗ )

2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku ) ; ;5

6 l e t f a c u l t a e t n =7 facHelp n 1 ; ;8

9 f a c u l t a e t 5 ; ;

Page 138: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Endrekursionsbeispiel ohne lokale Deklaration

Nochmals das Falkultätsbeispiel mit Endrekursion, diesmalaber ohne lokale Deklaration:

1 (∗ diesmal wi rd d ie h i l f s f u n k t i o n g loba ld e k l a r i e r t ∗ )

2 l e t rec facHelp n akku =3 i f n = 0 then akku4 else facHelp ( n−1) ( n∗akku ) ; ;5

6 l e t f a c u l t a e t n =7 facHelp n 1 ; ;8

9 f a c u l t a e t 5 ; ;

Page 139: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

OCaml erlaubt auch Funktionen mit generischem Rückgabetyp.Beispielcode:

1 l e t x_oder_y t e s t f u n k t i o n x y =2 i f t e s t f u n k t i o n x then x else y ; ;3 val x_oder_a : ( ’ a −> bool ) −> ’ a −> ’ a −> ’ a = <

fun>

Der Compiler kann hier noch nicht festlegen:

• Welchen Typ das Argument der testfunktion hat• Welchen Typ die Argumente von x_oder_y haben• Welchen Typ der Rückgabewert hat• OCaml verwendet daher eine sog. type variable: ’a

Page 140: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

OCaml erlaubt auch Funktionen mit generischem Rückgabetyp.Beispielcode:

1 l e t x_oder_y t e s t f u n k t i o n x y =2 i f t e s t f u n k t i o n x then x else y ; ;3 val x_oder_a : ( ’ a −> bool ) −> ’ a −> ’ a −> ’ a = <

fun>

Der Compiler kann hier noch nicht festlegen:

• Welchen Typ das Argument der testfunktion hat• Welchen Typ die Argumente von x_oder_y haben• Welchen Typ der Rückgabewert hat• OCaml verwendet daher eine sog. type variable: ’a

Page 141: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

OCaml erlaubt auch Funktionen mit generischem Rückgabetyp.Beispielcode:

1 l e t x_oder_y t e s t f u n k t i o n x y =2 i f t e s t f u n k t i o n x then x else y ; ;3 val x_oder_a : ( ’ a −> bool ) −> ’ a −> ’ a −> ’ a = <

fun>

Der Compiler kann hier noch nicht festlegen:

• Welchen Typ das Argument der testfunktion hat• Welchen Typ die Argumente von x_oder_y haben• Welchen Typ der Rückgabewert hat• OCaml verwendet daher eine sog. type variable: ’a

Page 142: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

OCaml erlaubt auch Funktionen mit generischem Rückgabetyp.Beispielcode:

1 l e t x_oder_y t e s t f u n k t i o n x y =2 i f t e s t f u n k t i o n x then x else y ; ;3 val x_oder_a : ( ’ a −> bool ) −> ’ a −> ’ a −> ’ a = <

fun>

Der Compiler kann hier noch nicht festlegen:

• Welchen Typ das Argument der testfunktion hat• Welchen Typ die Argumente von x_oder_y haben• Welchen Typ der Rückgabewert hat• OCaml verwendet daher eine sog. type variable: ’a

Page 143: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

OCaml erlaubt auch Funktionen mit generischem Rückgabetyp.Beispielcode:

1 l e t x_oder_y t e s t f u n k t i o n x y =2 i f t e s t f u n k t i o n x then x else y ; ;3 val x_oder_a : ( ’ a −> bool ) −> ’ a −> ’ a −> ’ a = <

fun>

Der Compiler kann hier noch nicht festlegen:

• Welchen Typ das Argument der testfunktion hat• Welchen Typ die Argumente von x_oder_y haben• Welchen Typ der Rückgabewert hat• OCaml verwendet daher eine sog. type variable: ’a

Page 144: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

OCaml erlaubt auch Funktionen mit generischem Rückgabetyp.Beispielcode:

1 l e t x_oder_y t e s t f u n k t i o n x y =2 i f t e s t f u n k t i o n x then x else y ; ;3 val x_oder_a : ( ’ a −> bool ) −> ’ a −> ’ a −> ’ a = <

fun>

Der Compiler kann hier noch nicht festlegen:

• Welchen Typ das Argument der testfunktion hat• Welchen Typ die Argumente von x_oder_y haben• Welchen Typ der Rückgabewert hat• OCaml verwendet daher eine sog. type variable: ’a

Page 145: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

OCaml erlaubt auch Funktionen mit generischem Rückgabetyp.Beispielcode:

1 l e t x_oder_y t e s t f u n k t i o n x y =2 i f t e s t f u n k t i o n x then x else y ; ;3 val x_oder_a : ( ’ a −> bool ) −> ’ a −> ’ a −> ’ a = <

fun>

Der Compiler kann hier noch nicht festlegen:

• Welchen Typ das Argument der testfunktion hat• Welchen Typ die Argumente von x_oder_y haben• Welchen Typ der Rückgabewert hat• OCaml verwendet daher eine sog. type variable: ’a

Page 146: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

OCaml erlaubt auch Funktionen mit generischem Rückgabetyp.Beispielcode:

1 l e t x_oder_y t e s t f u n k t i o n x y =2 i f t e s t f u n k t i o n x then x else y ; ;3 val x_oder_a : ( ’ a −> bool ) −> ’ a −> ’ a −> ’ a = <

fun>

Der Compiler kann hier noch nicht festlegen:

• Welchen Typ das Argument der testfunktion hat• Welchen Typ die Argumente von x_oder_y haben• Welchen Typ der Rückgabewert hat• OCaml verwendet daher eine sog. type variable: ’a

Page 147: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

OCaml erlaubt auch Funktionen mit generischem Rückgabetyp.Beispielcode:

1 l e t x_oder_y t e s t f u n k t i o n x y =2 i f t e s t f u n k t i o n x then x else y ; ;3 val x_oder_a : ( ’ a −> bool ) −> ’ a −> ’ a −> ’ a = <

fun>

Der Compiler kann hier noch nicht festlegen:

• Welchen Typ das Argument der testfunktion hat• Welchen Typ die Argumente von x_oder_y haben• Welchen Typ der Rückgabewert hat• OCaml verwendet daher eine sog. type variable: ’a

Page 148: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

OCaml erlaubt auch Funktionen mit generischem Rückgabetyp.Beispielcode:

1 l e t x_oder_y t e s t f u n k t i o n x y =2 i f t e s t f u n k t i o n x then x else y ; ;3 val x_oder_a : ( ’ a −> bool ) −> ’ a −> ’ a −> ’ a = <

fun>

Der Compiler kann hier noch nicht festlegen:

• Welchen Typ das Argument der testfunktion hat• Welchen Typ die Argumente von x_oder_y haben• Welchen Typ der Rückgabewert hat• OCaml verwendet daher eine sog. type variable: ’a

Page 149: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

OCaml erlaubt auch Funktionen mit generischem Rückgabetyp.Beispielcode:

1 l e t x_oder_y t e s t f u n k t i o n x y =2 i f t e s t f u n k t i o n x then x else y ; ;3 val x_oder_a : ( ’ a −> bool ) −> ’ a −> ’ a −> ’ a = <

fun>

Der Compiler kann hier noch nicht festlegen:

• Welchen Typ das Argument der testfunktion hat• Welchen Typ die Argumente von x_oder_y haben• Welchen Typ der Rückgabewert hat• OCaml verwendet daher eine sog. type variable: ’a

Page 150: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

Zwei Testfunktionen:

1 l e t groesserDre i x =2 x > 3 ; ;3

4 l e t l aengerDre i s =5 S t r i n g . leng th s > 3 ; ;

und das Ergebnis der Aufrufe:

1 x_oder_y groesserDre i 1 (−7) ; ;2 − : i n t = −73

4 x_oder_y laengerDre i " foooooo " " bar " ; ;5 − : s t r i n g = " foooooo "

Page 151: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

Zwei Testfunktionen:

1 l e t groesserDre i x =2 x > 3 ; ;3

4 l e t l aengerDre i s =5 S t r i n g . leng th s > 3 ; ;

und das Ergebnis der Aufrufe:

1 x_oder_y groesserDre i 1 (−7) ; ;2 − : i n t = −73

4 x_oder_y laengerDre i " foooooo " " bar " ; ;5 − : s t r i n g = " foooooo "

Page 152: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

Zwei Testfunktionen:

1 l e t groesserDre i x =2 x > 3 ; ;3

4 l e t l aengerDre i s =5 S t r i n g . leng th s > 3 ; ;

und das Ergebnis der Aufrufe:

1 x_oder_y groesserDre i 1 (−7) ; ;2 − : i n t = −73

4 x_oder_y laengerDre i " foooooo " " bar " ; ;5 − : s t r i n g = " foooooo "

Page 153: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

Zwei Testfunktionen:

1 l e t groesserDre i x =2 x > 3 ; ;3

4 l e t l aengerDre i s =5 S t r i n g . leng th s > 3 ; ;

und das Ergebnis der Aufrufe:

1 x_oder_y groesserDre i 1 (−7) ; ;2 − : i n t = −73

4 x_oder_y laengerDre i " foooooo " " bar " ; ;5 − : s t r i n g = " foooooo "

Page 154: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

Zwei Testfunktionen:

1 l e t groesserDre i x =2 x > 3 ; ;3

4 l e t l aengerDre i s =5 S t r i n g . leng th s > 3 ; ;

und das Ergebnis der Aufrufe:

1 x_oder_y groesserDre i 1 (−7) ; ;2 − : i n t = −73

4 x_oder_y laengerDre i " foooooo " " bar " ; ;5 − : s t r i n g = " foooooo "

Page 155: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

Zwei Testfunktionen:

1 l e t groesserDre i x =2 x > 3 ; ;3

4 l e t l aengerDre i s =5 S t r i n g . leng th s > 3 ; ;

und das Ergebnis der Aufrufe:

1 x_oder_y groesserDre i 1 (−7) ; ;2 − : i n t = −73

4 x_oder_y laengerDre i " foooooo " " bar " ; ;5 − : s t r i n g = " foooooo "

Page 156: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

Zwei Testfunktionen:

1 l e t groesserDre i x =2 x > 3 ; ;3

4 l e t l aengerDre i s =5 S t r i n g . leng th s > 3 ; ;

und das Ergebnis der Aufrufe:

1 x_oder_y groesserDre i 1 (−7) ; ;2 − : i n t = −73

4 x_oder_y laengerDre i " foooooo " " bar " ; ;5 − : s t r i n g = " foooooo "

Page 157: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

Zwei Testfunktionen:

1 l e t groesserDre i x =2 x > 3 ; ;3

4 l e t l aengerDre i s =5 S t r i n g . leng th s > 3 ; ;

und das Ergebnis der Aufrufe:

1 x_oder_y groesserDre i 1 (−7) ; ;2 − : i n t = −73

4 x_oder_y laengerDre i " foooooo " " bar " ; ;5 − : s t r i n g = " foooooo "

Page 158: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

Zwei Testfunktionen:

1 l e t groesserDre i x =2 x > 3 ; ;3

4 l e t l aengerDre i s =5 S t r i n g . leng th s > 3 ; ;

und das Ergebnis der Aufrufe:

1 x_oder_y groesserDre i 1 (−7) ; ;2 − : i n t = −73

4 x_oder_y laengerDre i " foooooo " " bar " ; ;5 − : s t r i n g = " foooooo "

Page 159: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

Zwei Testfunktionen:

1 l e t groesserDre i x =2 x > 3 ; ;3

4 l e t l aengerDre i s =5 S t r i n g . leng th s > 3 ; ;

und das Ergebnis der Aufrufe:

1 x_oder_y groesserDre i 1 (−7) ; ;2 − : i n t = −73

4 x_oder_y laengerDre i " foooooo " " bar " ; ;5 − : s t r i n g = " foooooo "

Page 160: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Generische Typisierung

Zwei Testfunktionen:

1 l e t groesserDre i x =2 x > 3 ; ;3

4 l e t l aengerDre i s =5 S t r i n g . leng th s > 3 ; ;

und das Ergebnis der Aufrufe:

1 x_oder_y groesserDre i 1 (−7) ; ;2 − : i n t = −73

4 x_oder_y laengerDre i " foooooo " " bar " ; ;5 − : s t r i n g = " foooooo "

Page 161: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Tupel, Records, Listen und Pattern Matching

• OCaml stellt grundsätzlich zwei Datenstrukturen bereit:Tupel und Listen

• Records sind eine Sonderform der Tupel. Dazu spätermehr.

• Tupel sind Sammlungen von Werten verschiedenen Typs.• Die Anzahl der Elemente eines Tupels ist fest.• Listen sind Sammlungen von Elementen gleichen Typs.• Die Anzahl der Elemente einer Liste ist beliebig.• Auf die Elemente eines Tupels oder einer Liste kann mit

pattern matching zugegriffen werden.• Pattern Matching ist eine erweiterte Form der switch-case

Anweisung aus C und Java.• alles Weitere folgt in Code-Beispielen

Page 162: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Tupel, Records, Listen und Pattern Matching

• OCaml stellt grundsätzlich zwei Datenstrukturen bereit:Tupel und Listen

• Records sind eine Sonderform der Tupel. Dazu spätermehr.

• Tupel sind Sammlungen von Werten verschiedenen Typs.• Die Anzahl der Elemente eines Tupels ist fest.• Listen sind Sammlungen von Elementen gleichen Typs.• Die Anzahl der Elemente einer Liste ist beliebig.• Auf die Elemente eines Tupels oder einer Liste kann mit

pattern matching zugegriffen werden.• Pattern Matching ist eine erweiterte Form der switch-case

Anweisung aus C und Java.• alles Weitere folgt in Code-Beispielen

Page 163: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Tupel, Records, Listen und Pattern Matching

• OCaml stellt grundsätzlich zwei Datenstrukturen bereit:Tupel und Listen

• Records sind eine Sonderform der Tupel. Dazu spätermehr.

• Tupel sind Sammlungen von Werten verschiedenen Typs.• Die Anzahl der Elemente eines Tupels ist fest.• Listen sind Sammlungen von Elementen gleichen Typs.• Die Anzahl der Elemente einer Liste ist beliebig.• Auf die Elemente eines Tupels oder einer Liste kann mit

pattern matching zugegriffen werden.• Pattern Matching ist eine erweiterte Form der switch-case

Anweisung aus C und Java.• alles Weitere folgt in Code-Beispielen

Page 164: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Tupel, Records, Listen und Pattern Matching

• OCaml stellt grundsätzlich zwei Datenstrukturen bereit:Tupel und Listen

• Records sind eine Sonderform der Tupel. Dazu spätermehr.

• Tupel sind Sammlungen von Werten verschiedenen Typs.• Die Anzahl der Elemente eines Tupels ist fest.• Listen sind Sammlungen von Elementen gleichen Typs.• Die Anzahl der Elemente einer Liste ist beliebig.• Auf die Elemente eines Tupels oder einer Liste kann mit

pattern matching zugegriffen werden.• Pattern Matching ist eine erweiterte Form der switch-case

Anweisung aus C und Java.• alles Weitere folgt in Code-Beispielen

Page 165: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Tupel, Records, Listen und Pattern Matching

• OCaml stellt grundsätzlich zwei Datenstrukturen bereit:Tupel und Listen

• Records sind eine Sonderform der Tupel. Dazu spätermehr.

• Tupel sind Sammlungen von Werten verschiedenen Typs.• Die Anzahl der Elemente eines Tupels ist fest.• Listen sind Sammlungen von Elementen gleichen Typs.• Die Anzahl der Elemente einer Liste ist beliebig.• Auf die Elemente eines Tupels oder einer Liste kann mit

pattern matching zugegriffen werden.• Pattern Matching ist eine erweiterte Form der switch-case

Anweisung aus C und Java.• alles Weitere folgt in Code-Beispielen

Page 166: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Tupel, Records, Listen und Pattern Matching

• OCaml stellt grundsätzlich zwei Datenstrukturen bereit:Tupel und Listen

• Records sind eine Sonderform der Tupel. Dazu spätermehr.

• Tupel sind Sammlungen von Werten verschiedenen Typs.• Die Anzahl der Elemente eines Tupels ist fest.• Listen sind Sammlungen von Elementen gleichen Typs.• Die Anzahl der Elemente einer Liste ist beliebig.• Auf die Elemente eines Tupels oder einer Liste kann mit

pattern matching zugegriffen werden.• Pattern Matching ist eine erweiterte Form der switch-case

Anweisung aus C und Java.• alles Weitere folgt in Code-Beispielen

Page 167: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Tupel, Records, Listen und Pattern Matching

• OCaml stellt grundsätzlich zwei Datenstrukturen bereit:Tupel und Listen

• Records sind eine Sonderform der Tupel. Dazu spätermehr.

• Tupel sind Sammlungen von Werten verschiedenen Typs.• Die Anzahl der Elemente eines Tupels ist fest.• Listen sind Sammlungen von Elementen gleichen Typs.• Die Anzahl der Elemente einer Liste ist beliebig.• Auf die Elemente eines Tupels oder einer Liste kann mit

pattern matching zugegriffen werden.• Pattern Matching ist eine erweiterte Form der switch-case

Anweisung aus C und Java.• alles Weitere folgt in Code-Beispielen

Page 168: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Tupel, Records, Listen und Pattern Matching

• OCaml stellt grundsätzlich zwei Datenstrukturen bereit:Tupel und Listen

• Records sind eine Sonderform der Tupel. Dazu spätermehr.

• Tupel sind Sammlungen von Werten verschiedenen Typs.• Die Anzahl der Elemente eines Tupels ist fest.• Listen sind Sammlungen von Elementen gleichen Typs.• Die Anzahl der Elemente einer Liste ist beliebig.• Auf die Elemente eines Tupels oder einer Liste kann mit

pattern matching zugegriffen werden.• Pattern Matching ist eine erweiterte Form der switch-case

Anweisung aus C und Java.• alles Weitere folgt in Code-Beispielen

Page 169: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Tupel, Records, Listen und Pattern Matching

• OCaml stellt grundsätzlich zwei Datenstrukturen bereit:Tupel und Listen

• Records sind eine Sonderform der Tupel. Dazu spätermehr.

• Tupel sind Sammlungen von Werten verschiedenen Typs.• Die Anzahl der Elemente eines Tupels ist fest.• Listen sind Sammlungen von Elementen gleichen Typs.• Die Anzahl der Elemente einer Liste ist beliebig.• Auf die Elemente eines Tupels oder einer Liste kann mit

pattern matching zugegriffen werden.• Pattern Matching ist eine erweiterte Form der switch-case

Anweisung aus C und Java.• alles Weitere folgt in Code-Beispielen

Page 170: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Tupel, Records, Listen und Pattern Matching

• OCaml stellt grundsätzlich zwei Datenstrukturen bereit:Tupel und Listen

• Records sind eine Sonderform der Tupel. Dazu spätermehr.

• Tupel sind Sammlungen von Werten verschiedenen Typs.• Die Anzahl der Elemente eines Tupels ist fest.• Listen sind Sammlungen von Elementen gleichen Typs.• Die Anzahl der Elemente einer Liste ist beliebig.• Auf die Elemente eines Tupels oder einer Liste kann mit

pattern matching zugegriffen werden.• Pattern Matching ist eine erweiterte Form der switch-case

Anweisung aus C und Java.• alles Weitere folgt in Code-Beispielen

Page 171: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Tupel, Records, Listen und Pattern Matching

• OCaml stellt grundsätzlich zwei Datenstrukturen bereit:Tupel und Listen

• Records sind eine Sonderform der Tupel. Dazu spätermehr.

• Tupel sind Sammlungen von Werten verschiedenen Typs.• Die Anzahl der Elemente eines Tupels ist fest.• Listen sind Sammlungen von Elementen gleichen Typs.• Die Anzahl der Elemente einer Liste ist beliebig.• Auf die Elemente eines Tupels oder einer Liste kann mit

pattern matching zugegriffen werden.• Pattern Matching ist eine erweiterte Form der switch-case

Anweisung aus C und Java.• alles Weitere folgt in Code-Beispielen

Page 172: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Tupel, Records, Listen und Pattern Matching

• OCaml stellt grundsätzlich zwei Datenstrukturen bereit:Tupel und Listen

• Records sind eine Sonderform der Tupel. Dazu spätermehr.

• Tupel sind Sammlungen von Werten verschiedenen Typs.• Die Anzahl der Elemente eines Tupels ist fest.• Listen sind Sammlungen von Elementen gleichen Typs.• Die Anzahl der Elemente einer Liste ist beliebig.• Auf die Elemente eines Tupels oder einer Liste kann mit

pattern matching zugegriffen werden.• Pattern Matching ist eine erweiterte Form der switch-case

Anweisung aus C und Java.• alles Weitere folgt in Code-Beispielen

Page 173: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Tupeln

• Die einzelnen Werte eines Tupels werden duch Kommasgetrennt:

1 l e t a_tup le = (3 , " th ree " ) ; ;

• Mit Patter-Matching werden die Einzelwerte ermittelt:

1 l e t ( x , y ) = a_tup le ; ;

• Das Pattern hat hier den Wert (x,y)• Welchen Wert und welchen Typ haben x und y?

Page 174: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Tupeln

• Die einzelnen Werte eines Tupels werden duch Kommasgetrennt:

1 l e t a_tup le = (3 , " th ree " ) ; ;

• Mit Patter-Matching werden die Einzelwerte ermittelt:

1 l e t ( x , y ) = a_tup le ; ;

• Das Pattern hat hier den Wert (x,y)• Welchen Wert und welchen Typ haben x und y?

Page 175: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Tupeln

• Die einzelnen Werte eines Tupels werden duch Kommasgetrennt:

1 l e t a_tup le = (3 , " th ree " ) ; ;

• Mit Patter-Matching werden die Einzelwerte ermittelt:

1 l e t ( x , y ) = a_tup le ; ;

• Das Pattern hat hier den Wert (x,y)• Welchen Wert und welchen Typ haben x und y?

Page 176: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Tupeln

• Die einzelnen Werte eines Tupels werden duch Kommasgetrennt:

1 l e t a_tup le = (3 , " th ree " ) ; ;

• Mit Patter-Matching werden die Einzelwerte ermittelt:

1 l e t ( x , y ) = a_tup le ; ;

• Das Pattern hat hier den Wert (x,y)• Welchen Wert und welchen Typ haben x und y?

Page 177: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Tupeln

• Die einzelnen Werte eines Tupels werden duch Kommasgetrennt:

1 l e t a_tup le = (3 , " th ree " ) ; ;

• Mit Patter-Matching werden die Einzelwerte ermittelt:

1 l e t ( x , y ) = a_tup le ; ;

• Das Pattern hat hier den Wert (x,y)• Welchen Wert und welchen Typ haben x und y?

Page 178: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Tupeln

• Die einzelnen Werte eines Tupels werden duch Kommasgetrennt:

1 l e t a_tup le = (3 , " th ree " ) ; ;

• Mit Patter-Matching werden die Einzelwerte ermittelt:

1 l e t ( x , y ) = a_tup le ; ;

• Das Pattern hat hier den Wert (x,y)• Welchen Wert und welchen Typ haben x und y?

Page 179: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Tupeln

• Die einzelnen Werte eines Tupels werden duch Kommasgetrennt:

1 l e t a_tup le = (3 , " th ree " ) ; ;

• Mit Patter-Matching werden die Einzelwerte ermittelt:

1 l e t ( x , y ) = a_tup le ; ;

• Das Pattern hat hier den Wert (x,y)• Welchen Wert und welchen Typ haben x und y?

Page 180: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Pattern-Matching

• Noch ein Beispiel mit Pattern-Matching:

1 l e t d is tance ( x1 , y1 ) ( x2 , y2 ) =2 s q r t ( ( x1 −. x2 ) ∗∗ 2. +. ( y1 −. y2 ) ∗∗ 2 . ) ; ;3 l e t p1 = ( 1 . 0 , 0 . 0 ) ; ;4 l e t p2 = ( 0 . 0 , 1 . 0 ) ; ;5 d is tance p1 p2 ; ;

• Welcher Wert wird angezeigt?

Page 181: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Pattern-Matching

• Noch ein Beispiel mit Pattern-Matching:

1 l e t d is tance ( x1 , y1 ) ( x2 , y2 ) =2 s q r t ( ( x1 −. x2 ) ∗∗ 2. +. ( y1 −. y2 ) ∗∗ 2 . ) ; ;3 l e t p1 = ( 1 . 0 , 0 . 0 ) ; ;4 l e t p2 = ( 0 . 0 , 1 . 0 ) ; ;5 d is tance p1 p2 ; ;

• Welcher Wert wird angezeigt?

Page 182: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Pattern-Matching

• Noch ein Beispiel mit Pattern-Matching:

1 l e t d is tance ( x1 , y1 ) ( x2 , y2 ) =2 s q r t ( ( x1 −. x2 ) ∗∗ 2. +. ( y1 −. y2 ) ∗∗ 2 . ) ; ;3 l e t p1 = ( 1 . 0 , 0 . 0 ) ; ;4 l e t p2 = ( 0 . 0 , 1 . 0 ) ; ;5 d is tance p1 p2 ; ;

• Welcher Wert wird angezeigt?

Page 183: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Pattern-Matching

• Noch ein Beispiel mit Pattern-Matching:

1 l e t d is tance ( x1 , y1 ) ( x2 , y2 ) =2 s q r t ( ( x1 −. x2 ) ∗∗ 2. +. ( y1 −. y2 ) ∗∗ 2 . ) ; ;3 l e t p1 = ( 1 . 0 , 0 . 0 ) ; ;4 l e t p2 = ( 0 . 0 , 1 . 0 ) ; ;5 d is tance p1 p2 ; ;

• Welcher Wert wird angezeigt?

Page 184: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Pattern-Matching

• Noch ein Beispiel mit Pattern-Matching:

1 l e t d is tance ( x1 , y1 ) ( x2 , y2 ) =2 s q r t ( ( x1 −. x2 ) ∗∗ 2. +. ( y1 −. y2 ) ∗∗ 2 . ) ; ;3 l e t p1 = ( 1 . 0 , 0 . 0 ) ; ;4 l e t p2 = ( 0 . 0 , 1 . 0 ) ; ;5 d is tance p1 p2 ; ;

• Welcher Wert wird angezeigt?

Page 185: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Pattern-Matching

• Noch ein Beispiel mit Pattern-Matching:

1 l e t d is tance ( x1 , y1 ) ( x2 , y2 ) =2 s q r t ( ( x1 −. x2 ) ∗∗ 2. +. ( y1 −. y2 ) ∗∗ 2 . ) ; ;3 l e t p1 = ( 1 . 0 , 0 . 0 ) ; ;4 l e t p2 = ( 0 . 0 , 1 . 0 ) ; ;5 d is tance p1 p2 ; ;

• Welcher Wert wird angezeigt?

Page 186: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Pattern-Matching

• Noch ein Beispiel mit Pattern-Matching:

1 l e t d is tance ( x1 , y1 ) ( x2 , y2 ) =2 s q r t ( ( x1 −. x2 ) ∗∗ 2. +. ( y1 −. y2 ) ∗∗ 2 . ) ; ;3 l e t p1 = ( 1 . 0 , 0 . 0 ) ; ;4 l e t p2 = ( 0 . 0 , 1 . 0 ) ; ;5 d is tance p1 p2 ; ;

• Welcher Wert wird angezeigt?

Page 187: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Pattern-Matching

• Noch ein Beispiel mit Pattern-Matching:

1 l e t d is tance ( x1 , y1 ) ( x2 , y2 ) =2 s q r t ( ( x1 −. x2 ) ∗∗ 2. +. ( y1 −. y2 ) ∗∗ 2 . ) ; ;3 l e t p1 = ( 1 . 0 , 0 . 0 ) ; ;4 l e t p2 = ( 0 . 0 , 1 . 0 ) ; ;5 d is tance p1 p2 ; ;

• Welcher Wert wird angezeigt?

Page 188: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Pattern-Matching

• Noch ein Beispiel mit Pattern-Matching:

1 l e t d is tance ( x1 , y1 ) ( x2 , y2 ) =2 s q r t ( ( x1 −. x2 ) ∗∗ 2. +. ( y1 −. y2 ) ∗∗ 2 . ) ; ;3 l e t p1 = ( 1 . 0 , 0 . 0 ) ; ;4 l e t p2 = ( 0 . 0 , 1 . 0 ) ; ;5 d is tance p1 p2 ; ;

• Welcher Wert wird angezeigt?

Page 189: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Listen

• Die einzelnen Werte einer Liste werden durch Strichpunkte(Semikolon) getrennt:

1 l e t l i s t e = [ 1 ; 2 ; 3 ] ; ;2 (∗ a l t e r n a t i v ∗ )3 l e t l i s t e = 1 : : 2 : : 3 : : [ ] ; ;

• der Operator :: hängt ein Element vor die Liste:

1 l e t l i s t eNeu = 0 : : l i s t e ; ;

• der Operator @ verkettet zwei Listen:

1 l e t l i s t e L a ng = [ 1 ; 2 ; 3 ] @ [ 4 ; 5 ; 6 ]2 l i s t e @ l i s teNeu

Page 190: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Listen

• Die einzelnen Werte einer Liste werden durch Strichpunkte(Semikolon) getrennt:

1 l e t l i s t e = [ 1 ; 2 ; 3 ] ; ;2 (∗ a l t e r n a t i v ∗ )3 l e t l i s t e = 1 : : 2 : : 3 : : [ ] ; ;

• der Operator :: hängt ein Element vor die Liste:

1 l e t l i s t eNeu = 0 : : l i s t e ; ;

• der Operator @ verkettet zwei Listen:

1 l e t l i s t e L a ng = [ 1 ; 2 ; 3 ] @ [ 4 ; 5 ; 6 ]2 l i s t e @ l i s teNeu

Page 191: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Listen

• Die einzelnen Werte einer Liste werden durch Strichpunkte(Semikolon) getrennt:

1 l e t l i s t e = [ 1 ; 2 ; 3 ] ; ;2 (∗ a l t e r n a t i v ∗ )3 l e t l i s t e = 1 : : 2 : : 3 : : [ ] ; ;

• der Operator :: hängt ein Element vor die Liste:

1 l e t l i s t eNeu = 0 : : l i s t e ; ;

• der Operator @ verkettet zwei Listen:

1 l e t l i s t e L a ng = [ 1 ; 2 ; 3 ] @ [ 4 ; 5 ; 6 ]2 l i s t e @ l i s teNeu

Page 192: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Listen

• Die einzelnen Werte einer Liste werden durch Strichpunkte(Semikolon) getrennt:

1 l e t l i s t e = [ 1 ; 2 ; 3 ] ; ;2 (∗ a l t e r n a t i v ∗ )3 l e t l i s t e = 1 : : 2 : : 3 : : [ ] ; ;

• der Operator :: hängt ein Element vor die Liste:

1 l e t l i s t eNeu = 0 : : l i s t e ; ;

• der Operator @ verkettet zwei Listen:

1 l e t l i s t e L a ng = [ 1 ; 2 ; 3 ] @ [ 4 ; 5 ; 6 ]2 l i s t e @ l i s teNeu

Page 193: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Listen

• Die einzelnen Werte einer Liste werden durch Strichpunkte(Semikolon) getrennt:

1 l e t l i s t e = [ 1 ; 2 ; 3 ] ; ;2 (∗ a l t e r n a t i v ∗ )3 l e t l i s t e = 1 : : 2 : : 3 : : [ ] ; ;

• der Operator :: hängt ein Element vor die Liste:

1 l e t l i s t eNeu = 0 : : l i s t e ; ;

• der Operator @ verkettet zwei Listen:

1 l e t l i s t e L a ng = [ 1 ; 2 ; 3 ] @ [ 4 ; 5 ; 6 ]2 l i s t e @ l i s teNeu

Page 194: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Listen

• Die einzelnen Werte einer Liste werden durch Strichpunkte(Semikolon) getrennt:

1 l e t l i s t e = [ 1 ; 2 ; 3 ] ; ;2 (∗ a l t e r n a t i v ∗ )3 l e t l i s t e = 1 : : 2 : : 3 : : [ ] ; ;

• der Operator :: hängt ein Element vor die Liste:

1 l e t l i s t eNeu = 0 : : l i s t e ; ;

• der Operator @ verkettet zwei Listen:

1 l e t l i s t e L a n g = [ 1 ; 2 ; 3 ] @ [ 4 ; 5 ; 6 ]2 l i s t e @ l i s teNeu

Page 195: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Listen

• Die einzelnen Werte einer Liste werden durch Strichpunkte(Semikolon) getrennt:

1 l e t l i s t e = [ 1 ; 2 ; 3 ] ; ;2 (∗ a l t e r n a t i v ∗ )3 l e t l i s t e = 1 : : 2 : : 3 : : [ ] ; ;

• der Operator :: hängt ein Element vor die Liste:

1 l e t l i s t eNeu = 0 : : l i s t e ; ;

• der Operator @ verkettet zwei Listen:

1 l e t l i s t e L a ng = [ 1 ; 2 ; 3 ] @ [ 4 ; 5 ; 6 ]2 l i s t e @ l i s teNeu

Page 196: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Listen

• Die einzelnen Werte einer Liste werden durch Strichpunkte(Semikolon) getrennt:

1 l e t l i s t e = [ 1 ; 2 ; 3 ] ; ;2 (∗ a l t e r n a t i v ∗ )3 l e t l i s t e = 1 : : 2 : : 3 : : [ ] ; ;

• der Operator :: hängt ein Element vor die Liste:

1 l e t l i s t eNeu = 0 : : l i s t e ; ;

• der Operator @ verkettet zwei Listen:

1 l e t l i s t e L a n g = [ 1 ; 2 ; 3 ] @ [ 4 ; 5 ; 6 ]2 l i s t e @ l i s teNeu

Page 197: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Listen

• Die einzelnen Werte einer Liste werden durch Strichpunkte(Semikolon) getrennt:

1 l e t l i s t e = [ 1 ; 2 ; 3 ] ; ;2 (∗ a l t e r n a t i v ∗ )3 l e t l i s t e = 1 : : 2 : : 3 : : [ ] ; ;

• der Operator :: hängt ein Element vor die Liste:

1 l e t l i s t eNeu = 0 : : l i s t e ; ;

• der Operator @ verkettet zwei Listen:

1 l e t l i s t e L a ng = [ 1 ; 2 ; 3 ] @ [ 4 ; 5 ; 6 ]2 l i s t e @ l i s teNeu

Page 198: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Listen

• Die einzelnen Werte einer Liste werden durch Strichpunkte(Semikolon) getrennt:

1 l e t l i s t e = [ 1 ; 2 ; 3 ] ; ;2 (∗ a l t e r n a t i v ∗ )3 l e t l i s t e = 1 : : 2 : : 3 : : [ ] ; ;

• der Operator :: hängt ein Element vor die Liste:

1 l e t l i s t eNeu = 0 : : l i s t e ; ;

• der Operator @ verkettet zwei Listen:

1 l e t l i s t e L a ng = [ 1 ; 2 ; 3 ] @ [ 4 ; 5 ; 6 ]2 l i s t e @ l i s teNeu

Page 199: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Beispiele zu Listen

• Die einzelnen Werte einer Liste werden durch Strichpunkte(Semikolon) getrennt:

1 l e t l i s t e = [ 1 ; 2 ; 3 ] ; ;2 (∗ a l t e r n a t i v ∗ )3 l e t l i s t e = 1 : : 2 : : 3 : : [ ] ; ;

• der Operator :: hängt ein Element vor die Liste:

1 l e t l i s t eNeu = 0 : : l i s t e ; ;

• der Operator @ verkettet zwei Listen:

1 l e t l i s t e L a ng = [ 1 ; 2 ; 3 ] @ [ 4 ; 5 ; 6 ]2 l i s t e @ l i s teNeu

Page 200: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Pattern-Matching und Listen

• Pattern-Matching mit dem Schlüsselwort match und derZeichenkombination ->

1 l e t meineLiebl ingsSprache languages =2 match languages with3 | erstesElement : : derGanzeRest −>

erstesElement4 | [ ] −> "OCaml" (∗ A good d e f a u l t ! ∗ )5 ; ;6

7 meineLiebl ingsSprache [ " Alemannisch " ; " Engl ish "; " Spanish " ; " French " ] ; ;

8 meineLiebl ingsSprache [ ] ; ;

Page 201: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Pattern-Matching und Listen

• Pattern-Matching mit dem Schlüsselwort match und derZeichenkombination ->

1 l e t meineLiebl ingsSprache languages =2 match languages with3 | erstesElement : : derGanzeRest −>

erstesElement4 | [ ] −> "OCaml" (∗ A good d e f a u l t ! ∗ )5 ; ;6

7 meineLiebl ingsSprache [ " Alemannisch " ; " Engl ish "; " Spanish " ; " French " ] ; ;

8 meineLiebl ingsSprache [ ] ; ;

Page 202: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Pattern-Matching und Listen

• Pattern-Matching mit dem Schlüsselwort match und derZeichenkombination ->

1 l e t meineLiebl ingsSprache languages =2 match languages with3 | erstesElement : : derGanzeRest −>

erstesElement4 | [ ] −> "OCaml" (∗ A good d e f a u l t ! ∗ )5 ; ;6

7 meineLiebl ingsSprache [ " Alemannisch " ; " Engl ish "; " Spanish " ; " French " ] ; ;

8 meineLiebl ingsSprache [ ] ; ;

Page 203: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Pattern-Matching und Listen

• Pattern-Matching mit dem Schlüsselwort match und derZeichenkombination ->

1 l e t meineLiebl ingsSprache languages =2 match languages with3 | erstesElement : : derGanzeRest −>

erstesElement4 | [ ] −> "OCaml" (∗ A good d e f a u l t ! ∗ )5 ; ;6

7 meineLiebl ingsSprache [ " Alemannisch " ; " Engl ish "; " Spanish " ; " French " ] ; ;

8 meineLiebl ingsSprache [ ] ; ;

Page 204: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Pattern-Matching und Listen

• Pattern-Matching mit dem Schlüsselwort match und derZeichenkombination ->

1 l e t meineLiebl ingsSprache languages =2 match languages with3 | erstesElement : : derGanzeRest −>

erstesElement4 | [ ] −> "OCaml" (∗ A good d e f a u l t ! ∗ )5 ; ;6

7 meineLiebl ingsSprache [ " Alemannisch " ; " Engl ish "; " Spanish " ; " French " ] ; ;

8 meineLiebl ingsSprache [ ] ; ;

Page 205: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Pattern-Matching und Listen

• Pattern-Matching mit dem Schlüsselwort match und derZeichenkombination ->

1 l e t meineLiebl ingsSprache languages =2 match languages with3 | erstesElement : : derGanzeRest −>

erstesElement4 | [ ] −> "OCaml" (∗ A good d e f a u l t ! ∗ )5 ; ;6

7 meineLiebl ingsSprache [ " Alemannisch " ; " Engl ish "; " Spanish " ; " French " ] ; ;

8 meineLiebl ingsSprache [ ] ; ;

Page 206: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Pattern-Matching und Listen

• Pattern-Matching mit dem Schlüsselwort match und derZeichenkombination ->

1 l e t meineLiebl ingsSprache languages =2 match languages with3 | erstesElement : : derGanzeRest −>

erstesElement4 | [ ] −> "OCaml" (∗ A good d e f a u l t ! ∗ )5 ; ;6

7 meineLiebl ingsSprache [ " Alemannisch " ; " Engl ish "; " Spanish " ; " French " ] ; ;

8 meineLiebl ingsSprache [ ] ; ;

Page 207: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Pattern-Matching und Listen

• Pattern-Matching mit dem Schlüsselwort match und derZeichenkombination ->

1 l e t meineLiebl ingsSprache languages =2 match languages with3 | erstesElement : : derGanzeRest −>

erstesElement4 | [ ] −> "OCaml" (∗ A good d e f a u l t ! ∗ )5 ; ;6

7 meineLiebl ingsSprache [ " Alemannisch " ; " Engl ish "; " Spanish " ; " French " ] ; ;

8 meineLiebl ingsSprache [ ] ; ;

Page 208: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Pattern-Matching und Listen

• Pattern-Matching mit dem Schlüsselwort match und derZeichenkombination ->

1 l e t meineLiebl ingsSprache languages =2 match languages with3 | erstesElement : : derGanzeRest −>

erstesElement4 | [ ] −> "OCaml" (∗ A good d e f a u l t ! ∗ )5 ; ;6

7 meineLiebl ingsSprache [ " Alemannisch " ; " Engl ish "; " Spanish " ; " French " ] ; ;

8 meineLiebl ingsSprache [ ] ; ;

Page 209: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Übungsaufgabe zu Pattern-Matching, Listen undrekursiven Funktionen

• Schreibe eine rekursive Funktion sum, die alle Werte einerInteger-Liste aufsummiert

• Hinweis: Pattern-Matching mit match verwenden.• Schreibe eine Funktion trimmDoppler, die zwei

benachbarte Elemente, die den gleichen Wert haben, aufein einzelnes Element reduzieren.

Page 210: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Übungsaufgabe zu Pattern-Matching, Listen undrekursiven Funktionen

• Schreibe eine rekursive Funktion sum, die alle Werte einerInteger-Liste aufsummiert

• Hinweis: Pattern-Matching mit match verwenden.• Schreibe eine Funktion trimmDoppler, die zwei

benachbarte Elemente, die den gleichen Wert haben, aufein einzelnes Element reduzieren.

Page 211: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Übungsaufgabe zu Pattern-Matching, Listen undrekursiven Funktionen

• Schreibe eine rekursive Funktion sum, die alle Werte einerInteger-Liste aufsummiert

• Hinweis: Pattern-Matching mit match verwenden.• Schreibe eine Funktion trimmDoppler, die zwei

benachbarte Elemente, die den gleichen Wert haben, aufein einzelnes Element reduzieren.

Page 212: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Übungsaufgabe zu Pattern-Matching, Listen undrekursiven Funktionen

• Schreibe eine rekursive Funktion sum, die alle Werte einerInteger-Liste aufsummiert

• Hinweis: Pattern-Matching mit match verwenden.• Schreibe eine Funktion trimmDoppler, die zwei

benachbarte Elemente, die den gleichen Wert haben, aufein einzelnes Element reduzieren.

Page 213: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 214: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 215: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 216: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 217: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 218: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 219: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 220: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 221: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 222: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 223: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 224: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 225: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 226: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Lösung

1 l e t rec sum l i s t e =2 match l i s t e with3 | head : : t a i l −> head + sum t a i l4 | [ ] −> 05 ; ;

1 l e t rec t r imDopp ler l i s t e =2 match l i s t e with3 | [ ] −> [ ]4 | [ head ] −> [ head ]5 | e1 : : e2 : : r e s t −>6 i f e1 = e2 then t r imDopp ler ( e1 : : r e s t )7 else e1 : : t r imDopp ler ( e2 : : r e s t )8 ; ;

Page 227: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort

• Quicksort arbeitet nach dem römischen Prinzip: Teile undherrsche!

• Um eine Liste zu sortieren, wird diese in zwei Listengeteilt, die einzeln sortiert werden.

• Das Teilen erfolgt nach diesem Algorithmus:• Wähle ein beliebiges Element der Liste, z.B. das Erste

(head)• Dieses Element nennen wir Pivot-Element• Verschiebe alle Elemente der Liste, die kleiner sind als

Pivot in die linke Teilliste• Verschiebe alle Elemente der Liste, die grösser sind als

Pivot in die rechte Teilliste.

• Bearbeite die Teillisten nach dem gleichen Prinzip(rekursiv)

Page 228: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort

• Quicksort arbeitet nach dem römischen Prinzip: Teile undherrsche!

• Um eine Liste zu sortieren, wird diese in zwei Listengeteilt, die einzeln sortiert werden.

• Das Teilen erfolgt nach diesem Algorithmus:• Wähle ein beliebiges Element der Liste, z.B. das Erste

(head)• Dieses Element nennen wir Pivot-Element• Verschiebe alle Elemente der Liste, die kleiner sind als

Pivot in die linke Teilliste• Verschiebe alle Elemente der Liste, die grösser sind als

Pivot in die rechte Teilliste.

• Bearbeite die Teillisten nach dem gleichen Prinzip(rekursiv)

Page 229: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort

• Quicksort arbeitet nach dem römischen Prinzip: Teile undherrsche!

• Um eine Liste zu sortieren, wird diese in zwei Listengeteilt, die einzeln sortiert werden.

• Das Teilen erfolgt nach diesem Algorithmus:• Wähle ein beliebiges Element der Liste, z.B. das Erste

(head)• Dieses Element nennen wir Pivot-Element• Verschiebe alle Elemente der Liste, die kleiner sind als

Pivot in die linke Teilliste• Verschiebe alle Elemente der Liste, die grösser sind als

Pivot in die rechte Teilliste.

• Bearbeite die Teillisten nach dem gleichen Prinzip(rekursiv)

Page 230: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort

• Quicksort arbeitet nach dem römischen Prinzip: Teile undherrsche!

• Um eine Liste zu sortieren, wird diese in zwei Listengeteilt, die einzeln sortiert werden.

• Das Teilen erfolgt nach diesem Algorithmus:• Wähle ein beliebiges Element der Liste, z.B. das Erste

(head)• Dieses Element nennen wir Pivot-Element• Verschiebe alle Elemente der Liste, die kleiner sind als

Pivot in die linke Teilliste• Verschiebe alle Elemente der Liste, die grösser sind als

Pivot in die rechte Teilliste.

• Bearbeite die Teillisten nach dem gleichen Prinzip(rekursiv)

Page 231: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort

• Quicksort arbeitet nach dem römischen Prinzip: Teile undherrsche!

• Um eine Liste zu sortieren, wird diese in zwei Listengeteilt, die einzeln sortiert werden.

• Das Teilen erfolgt nach diesem Algorithmus:• Wähle ein beliebiges Element der Liste, z.B. das Erste

(head)• Dieses Element nennen wir Pivot-Element• Verschiebe alle Elemente der Liste, die kleiner sind als

Pivot in die linke Teilliste• Verschiebe alle Elemente der Liste, die grösser sind als

Pivot in die rechte Teilliste.

• Bearbeite die Teillisten nach dem gleichen Prinzip(rekursiv)

Page 232: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort

• Quicksort arbeitet nach dem römischen Prinzip: Teile undherrsche!

• Um eine Liste zu sortieren, wird diese in zwei Listengeteilt, die einzeln sortiert werden.

• Das Teilen erfolgt nach diesem Algorithmus:• Wähle ein beliebiges Element der Liste, z.B. das Erste

(head)• Dieses Element nennen wir Pivot-Element• Verschiebe alle Elemente der Liste, die kleiner sind als

Pivot in die linke Teilliste• Verschiebe alle Elemente der Liste, die grösser sind als

Pivot in die rechte Teilliste.

• Bearbeite die Teillisten nach dem gleichen Prinzip(rekursiv)

Page 233: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort

• Quicksort arbeitet nach dem römischen Prinzip: Teile undherrsche!

• Um eine Liste zu sortieren, wird diese in zwei Listengeteilt, die einzeln sortiert werden.

• Das Teilen erfolgt nach diesem Algorithmus:• Wähle ein beliebiges Element der Liste, z.B. das Erste

(head)• Dieses Element nennen wir Pivot-Element• Verschiebe alle Elemente der Liste, die kleiner sind als

Pivot in die linke Teilliste• Verschiebe alle Elemente der Liste, die grösser sind als

Pivot in die rechte Teilliste.

• Bearbeite die Teillisten nach dem gleichen Prinzip(rekursiv)

Page 234: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort

• Quicksort arbeitet nach dem römischen Prinzip: Teile undherrsche!

• Um eine Liste zu sortieren, wird diese in zwei Listengeteilt, die einzeln sortiert werden.

• Das Teilen erfolgt nach diesem Algorithmus:• Wähle ein beliebiges Element der Liste, z.B. das Erste

(head)• Dieses Element nennen wir Pivot-Element• Verschiebe alle Elemente der Liste, die kleiner sind als

Pivot in die linke Teilliste• Verschiebe alle Elemente der Liste, die grösser sind als

Pivot in die rechte Teilliste.

• Bearbeite die Teillisten nach dem gleichen Prinzip(rekursiv)

Page 235: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort

• Quicksort arbeitet nach dem römischen Prinzip: Teile undherrsche!

• Um eine Liste zu sortieren, wird diese in zwei Listengeteilt, die einzeln sortiert werden.

• Das Teilen erfolgt nach diesem Algorithmus:• Wähle ein beliebiges Element der Liste, z.B. das Erste

(head)• Dieses Element nennen wir Pivot-Element• Verschiebe alle Elemente der Liste, die kleiner sind als

Pivot in die linke Teilliste• Verschiebe alle Elemente der Liste, die grösser sind als

Pivot in die rechte Teilliste.

• Bearbeite die Teillisten nach dem gleichen Prinzip(rekursiv)

Page 236: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort: Zahlenbeispiel

1 [ 1 0 ; 1 3 ; 1 7 ; 4 ; 5 ; 2 ; 7 ; 3 ; 1 ; 1 1 ]2 [4 ;5 ;2 ;7;3;1] − − [10] − − [13;17;11]3 [11]−−[13]−−[17]4 [] − −[17] − −[]5 [] − −[11] − −[]6

7 [2;3;1] − − [4] − − [5;7]8 [] − −[5] − −[7]9 [] − −[7] − −[]

10

11 [1] − −[2] − −[3]12 [] − −[3] − −[]13 [] − −[1] − −[]14

15 [ 1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 1 0 ; 1 1 ; 1 3 ; 1 7 ]

Page 237: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort: Zahlenbeispiel

1 [ 1 0 ; 1 3 ; 1 7 ; 4 ; 5 ; 2 ; 7 ; 3 ; 1 ; 1 1 ]2 [4 ;5 ;2 ;7;3;1] − − [10] − − [13;17;11]3 [11]−−[13]−−[17]4 [] − −[17] − −[]5 [] − −[11] − −[]6

7 [2;3;1] − − [4] − − [5;7]8 [] − −[5] − −[7]9 [] − −[7] − −[]

10

11 [1] − −[2] − −[3]12 [] − −[3] − −[]13 [] − −[1] − −[]14

15 [ 1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 1 0 ; 1 1 ; 1 3 ; 1 7 ]

Page 238: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort: Zahlenbeispiel

1 [ 1 0 ; 1 3 ; 1 7 ; 4 ; 5 ; 2 ; 7 ; 3 ; 1 ; 1 1 ]2 [4 ;5 ;2 ;7;3;1] − − [10] − − [13;17;11]3 [11]−−[13]−−[17]4 [] − −[17] − −[]5 [] − −[11] − −[]6

7 [2;3;1] − − [4] − − [5;7]8 [] − −[5] − −[7]9 [] − −[7] − −[]

10

11 [1] − −[2] − −[3]12 [] − −[3] − −[]13 [] − −[1] − −[]14

15 [ 1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 1 0 ; 1 1 ; 1 3 ; 1 7 ]

Page 239: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort: Zahlenbeispiel

1 [ 1 0 ; 1 3 ; 1 7 ; 4 ; 5 ; 2 ; 7 ; 3 ; 1 ; 1 1 ]2 [4 ;5 ;2 ;7;3;1] − − [10] − − [13;17;11]3 [11]−−[13]−−[17]4 [] − −[17] − −[]5 [] − −[11] − −[]6

7 [2;3;1] − − [4] − − [5;7]8 [] − −[5] − −[7]9 [] − −[7] − −[]

10

11 [1] − −[2] − −[3]12 [] − −[3] − −[]13 [] − −[1] − −[]14

15 [ 1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 1 0 ; 1 1 ; 1 3 ; 1 7 ]

Page 240: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort: Zahlenbeispiel

1 [ 1 0 ; 1 3 ; 1 7 ; 4 ; 5 ; 2 ; 7 ; 3 ; 1 ; 1 1 ]2 [4 ;5 ;2 ;7;3;1] − − [10] − − [13;17;11]3 [11]−−[13]−−[17]4 [] − −[17] − −[]5 [] − −[11] − −[]6

7 [2;3;1] − − [4] − − [5;7]8 [] − −[5] − −[7]9 [] − −[7] − −[]

10

11 [1] − −[2] − −[3]12 [] − −[3] − −[]13 [] − −[1] − −[]14

15 [ 1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 1 0 ; 1 1 ; 1 3 ; 1 7 ]

Page 241: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort: Zahlenbeispiel

1 [ 1 0 ; 1 3 ; 1 7 ; 4 ; 5 ; 2 ; 7 ; 3 ; 1 ; 1 1 ]2 [4 ;5 ;2 ;7;3;1] − − [10] − − [13;17;11]3 [11]−−[13]−−[17]4 [] − −[17] − −[]5 [] − −[11] − −[]6

7 [2;3;1] − − [4] − − [5;7]8 [] − −[5] − −[7]9 [] − −[7] − −[]

10

11 [1] − −[2] − −[3]12 [] − −[3] − −[]13 [] − −[1] − −[]14

15 [ 1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 1 0 ; 1 1 ; 1 3 ; 1 7 ]

Page 242: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort: Zahlenbeispiel

1 [ 1 0 ; 1 3 ; 1 7 ; 4 ; 5 ; 2 ; 7 ; 3 ; 1 ; 1 1 ]2 [4 ;5 ;2 ;7;3;1] − − [10] − − [13;17;11]3 [11]−−[13]−−[17]4 [] − −[17] − −[]5 [] − −[11] − −[]6

7 [2;3;1] − − [4] − − [5;7]8 [] − −[5] − −[7]9 [] − −[7] − −[]

10

11 [1] − −[2] − −[3]12 [] − −[3] − −[]13 [] − −[1] − −[]14

15 [ 1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 1 0 ; 1 1 ; 1 3 ; 1 7 ]

Page 243: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort: Zahlenbeispiel

1 [ 1 0 ; 1 3 ; 1 7 ; 4 ; 5 ; 2 ; 7 ; 3 ; 1 ; 1 1 ]2 [4 ;5 ;2 ;7;3;1] − − [10] − − [13;17;11]3 [11]−−[13]−−[17]4 [] − −[17] − −[]5 [] − −[11] − −[]6

7 [2;3;1] − − [4] − − [5;7]8 [] − −[5] − −[7]9 [] − −[7] − −[]

10

11 [1] − −[2] − −[3]12 [] − −[3] − −[]13 [] − −[1] − −[]14

15 [ 1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 1 0 ; 1 1 ; 1 3 ; 1 7 ]

Page 244: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort: Zahlenbeispiel

1 [ 1 0 ; 1 3 ; 1 7 ; 4 ; 5 ; 2 ; 7 ; 3 ; 1 ; 1 1 ]2 [4 ;5 ;2 ;7;3;1] − − [10] − − [13;17;11]3 [11]−−[13]−−[17]4 [] − −[17] − −[]5 [] − −[11] − −[]6

7 [2;3;1] − − [4] − − [5;7]8 [] − −[5] − −[7]9 [] − −[7] − −[]

10

11 [1] − −[2] − −[3]12 [] − −[3] − −[]13 [] − −[1] − −[]14

15 [ 1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 1 0 ; 1 1 ; 1 3 ; 1 7 ]

Page 245: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort: Zahlenbeispiel

1 [ 1 0 ; 1 3 ; 1 7 ; 4 ; 5 ; 2 ; 7 ; 3 ; 1 ; 1 1 ]2 [4 ;5 ;2 ;7;3;1] − − [10] − − [13;17;11]3 [11]−−[13]−−[17]4 [] − −[17] − −[]5 [] − −[11] − −[]6

7 [2;3;1] − − [4] − − [5;7]8 [] − −[5] − −[7]9 [] − −[7] − −[]

10

11 [1] − −[2] − −[3]12 [] − −[3] − −[]13 [] − −[1] − −[]14

15 [ 1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 1 0 ; 1 1 ; 1 3 ; 1 7 ]

Page 246: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort: Zahlenbeispiel

1 [ 1 0 ; 1 3 ; 1 7 ; 4 ; 5 ; 2 ; 7 ; 3 ; 1 ; 1 1 ]2 [4 ;5 ;2 ;7;3;1] − − [10] − − [13;17;11]3 [11]−−[13]−−[17]4 [] − −[17] − −[]5 [] − −[11] − −[]6

7 [2;3;1] − − [4] − − [5;7]8 [] − −[5] − −[7]9 [] − −[7] − −[]

10

11 [1] − −[2] − −[3]12 [] − −[3] − −[]13 [] − −[1] − −[]14

15 [ 1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 1 0 ; 1 1 ; 1 3 ; 1 7 ]

Page 247: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort: Zahlenbeispiel

1 [ 1 0 ; 1 3 ; 1 7 ; 4 ; 5 ; 2 ; 7 ; 3 ; 1 ; 1 1 ]2 [4 ;5 ;2 ;7;3;1] − − [10] − − [13;17;11]3 [11]−−[13]−−[17]4 [] − −[17] − −[]5 [] − −[11] − −[]6

7 [2;3;1] − − [4] − − [5;7]8 [] − −[5] − −[7]9 [] − −[7] − −[]

10

11 [1] − −[2] − −[3]12 [] − −[3] − −[]13 [] − −[1] − −[]14

15 [ 1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 1 0 ; 1 1 ; 1 3 ; 1 7 ]

Page 248: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Quicksort: Zahlenbeispiel

1 [ 1 0 ; 1 3 ; 1 7 ; 4 ; 5 ; 2 ; 7 ; 3 ; 1 ; 1 1 ]2 [4 ;5 ;2 ;7;3;1] − − [10] − − [13;17;11]3 [11]−−[13]−−[17]4 [] − −[17] − −[]5 [] − −[11] − −[]6

7 [2;3;1] − − [4] − − [5;7]8 [] − −[5] − −[7]9 [] − −[7] − −[]

10

11 [1] − −[2] − −[3]12 [] − −[3] − −[]13 [] − −[1] − −[]14

15 [ 1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 1 0 ; 1 1 ; 1 3 ; 1 7 ]

Page 249: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

• Bisher haben wir Funktionen so deklariert:

1 l e t i nc a = a + 1 ; ;

• Das ist eine vereinfachte Syntax (syntactic sugar) für dieausführliche Deklaration:

1 l e t i nc = fun a −> a + 1 ; ;

• Wir haben gelernt, dass mit let Aliasnamen für Ausdrückegebildet werden.

• Das heisst umgekehrt, dass die Deklaration mit fun einenganz normalen, gleichberechtigten Ausdruck darstellt:

1 fun a −> a + 1 ; ;

Page 250: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

• Bisher haben wir Funktionen so deklariert:

1 l e t i nc a = a + 1 ; ;

• Das ist eine vereinfachte Syntax (syntactic sugar) für dieausführliche Deklaration:

1 l e t i nc = fun a −> a + 1 ; ;

• Wir haben gelernt, dass mit let Aliasnamen für Ausdrückegebildet werden.

• Das heisst umgekehrt, dass die Deklaration mit fun einenganz normalen, gleichberechtigten Ausdruck darstellt:

1 fun a −> a + 1 ; ;

Page 251: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

• Bisher haben wir Funktionen so deklariert:

1 l e t i nc a = a + 1 ; ;

• Das ist eine vereinfachte Syntax (syntactic sugar) für dieausführliche Deklaration:

1 l e t i nc = fun a −> a + 1 ; ;

• Wir haben gelernt, dass mit let Aliasnamen für Ausdrückegebildet werden.

• Das heisst umgekehrt, dass die Deklaration mit fun einenganz normalen, gleichberechtigten Ausdruck darstellt:

1 fun a −> a + 1 ; ;

Page 252: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

• Bisher haben wir Funktionen so deklariert:

1 l e t i nc a = a + 1 ; ;

• Das ist eine vereinfachte Syntax (syntactic sugar) für dieausführliche Deklaration:

1 l e t i nc = fun a −> a + 1 ; ;

• Wir haben gelernt, dass mit let Aliasnamen für Ausdrückegebildet werden.

• Das heisst umgekehrt, dass die Deklaration mit fun einenganz normalen, gleichberechtigten Ausdruck darstellt:

1 fun a −> a + 1 ; ;

Page 253: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

• Bisher haben wir Funktionen so deklariert:

1 l e t i nc a = a + 1 ; ;

• Das ist eine vereinfachte Syntax (syntactic sugar) für dieausführliche Deklaration:

1 l e t i nc = fun a −> a + 1 ; ;

• Wir haben gelernt, dass mit let Aliasnamen für Ausdrückegebildet werden.

• Das heisst umgekehrt, dass die Deklaration mit fun einenganz normalen, gleichberechtigten Ausdruck darstellt:

1 fun a −> a + 1 ; ;

Page 254: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

• Bisher haben wir Funktionen so deklariert:

1 l e t i nc a = a + 1 ; ;

• Das ist eine vereinfachte Syntax (syntactic sugar) für dieausführliche Deklaration:

1 l e t i nc = fun a −> a + 1 ; ;

• Wir haben gelernt, dass mit let Aliasnamen für Ausdrückegebildet werden.

• Das heisst umgekehrt, dass die Deklaration mit fun einenganz normalen, gleichberechtigten Ausdruck darstellt:

1 fun a −> a + 1 ; ;

Page 255: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

• Bisher haben wir Funktionen so deklariert:

1 l e t i nc a = a + 1 ; ;

• Das ist eine vereinfachte Syntax (syntactic sugar) für dieausführliche Deklaration:

1 l e t i nc = fun a −> a + 1 ; ;

• Wir haben gelernt, dass mit let Aliasnamen für Ausdrückegebildet werden.

• Das heisst umgekehrt, dass die Deklaration mit fun einenganz normalen, gleichberechtigten Ausdruck darstellt:

1 fun a −> a + 1 ; ;

Page 256: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

• Bisher haben wir Funktionen so deklariert:

1 l e t i nc a = a + 1 ; ;

• Das ist eine vereinfachte Syntax (syntactic sugar) für dieausführliche Deklaration:

1 l e t i nc = fun a −> a + 1 ; ;

• Wir haben gelernt, dass mit let Aliasnamen für Ausdrückegebildet werden.

• Das heisst umgekehrt, dass die Deklaration mit fun einenganz normalen, gleichberechtigten Ausdruck darstellt:

1 fun a −> a + 1 ; ;

Page 257: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

Das bedeutet:• Funktionsausdrücke kann man mit let an einen Namen

binden: klar, hatten wir schon.• Funktionsausdrücke können als Parameter anderer

Funktionen auftreten.• Funktionsausdrücke können als Ergebnis einer Funktion

zurückgegeben werden.• Funktionsausdrücke können in Datenstrukturen wie z.B.

Listen oder Tupel gespeichert werden.

Page 258: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

Das bedeutet:• Funktionsausdrücke kann man mit let an einen Namen

binden: klar, hatten wir schon.• Funktionsausdrücke können als Parameter anderer

Funktionen auftreten.• Funktionsausdrücke können als Ergebnis einer Funktion

zurückgegeben werden.• Funktionsausdrücke können in Datenstrukturen wie z.B.

Listen oder Tupel gespeichert werden.

Page 259: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

Das bedeutet:• Funktionsausdrücke kann man mit let an einen Namen

binden: klar, hatten wir schon.• Funktionsausdrücke können als Parameter anderer

Funktionen auftreten.• Funktionsausdrücke können als Ergebnis einer Funktion

zurückgegeben werden.• Funktionsausdrücke können in Datenstrukturen wie z.B.

Listen oder Tupel gespeichert werden.

Page 260: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

Das bedeutet:• Funktionsausdrücke kann man mit let an einen Namen

binden: klar, hatten wir schon.• Funktionsausdrücke können als Parameter anderer

Funktionen auftreten.• Funktionsausdrücke können als Ergebnis einer Funktion

zurückgegeben werden.• Funktionsausdrücke können in Datenstrukturen wie z.B.

Listen oder Tupel gespeichert werden.

Page 261: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

Das bedeutet:• Funktionsausdrücke kann man mit let an einen Namen

binden: klar, hatten wir schon.• Funktionsausdrücke können als Parameter anderer

Funktionen auftreten.• Funktionsausdrücke können als Ergebnis einer Funktion

zurückgegeben werden.• Funktionsausdrücke können in Datenstrukturen wie z.B.

Listen oder Tupel gespeichert werden.

Page 262: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

Beispiel:

1 l e t f u n k l i s t e =2 [ ( fun x−>x+1) ; ( fun x−>x+2) ; ( fun x−>x+3) ] ; ;3

4 l e t rec i t e r a t e l =5 match l with6 | [ ] −> 07 | h : : t −> p r i n t _ i n t ( h 5) ; i t e r a t e t ; ;8

9 i t e r a t e f u n k l i s t e ; ;

Page 263: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

Beispiel:

1 l e t f u n k l i s t e =2 [ ( fun x−>x+1) ; ( fun x−>x+2) ; ( fun x−>x+3) ] ; ;3

4 l e t rec i t e r a t e l =5 match l with6 | [ ] −> 07 | h : : t −> p r i n t _ i n t ( h 5) ; i t e r a t e t ; ;8

9 i t e r a t e f u n k l i s t e ; ;

Page 264: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

Beispiel:

1 l e t f u n k l i s t e =2 [ ( fun x−>x+1) ; ( fun x−>x+2) ; ( fun x−>x+3) ] ; ;3

4 l e t rec i t e r a t e l =5 match l with6 | [ ] −> 07 | h : : t −> p r i n t _ i n t ( h 5) ; i t e r a t e t ; ;8

9 i t e r a t e f u n k l i s t e ; ;

Page 265: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

Beispiel:

1 l e t f u n k l i s t e =2 [ ( fun x−>x+1) ; ( fun x−>x+2) ; ( fun x−>x+3) ] ; ;3

4 l e t rec i t e r a t e l =5 match l with6 | [ ] −> 07 | h : : t −> p r i n t _ i n t ( h 5) ; i t e r a t e t ; ;8

9 i t e r a t e f u n k l i s t e ; ;

Page 266: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

Beispiel:

1 l e t f u n k l i s t e =2 [ ( fun x−>x+1) ; ( fun x−>x+2) ; ( fun x−>x+3) ] ; ;3

4 l e t rec i t e r a t e l =5 match l with6 | [ ] −> 07 | h : : t −> p r i n t _ i n t ( h 5) ; i t e r a t e t ; ;8

9 i t e r a t e f u n k l i s t e ; ;

Page 267: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

Beispiel:

1 l e t f u n k l i s t e =2 [ ( fun x−>x+1) ; ( fun x−>x+2) ; ( fun x−>x+3) ] ; ;3

4 l e t rec i t e r a t e l =5 match l with6 | [ ] −> 07 | h : : t −> p r i n t _ i n t ( h 5) ; i t e r a t e t ; ;8

9 i t e r a t e f u n k l i s t e ; ;

Page 268: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Funktionsdeklaration mit fun

Beispiel:

1 l e t f u n k l i s t e =2 [ ( fun x−>x+1) ; ( fun x−>x+2) ; ( fun x−>x+3) ] ; ;3

4 l e t rec i t e r a t e l =5 match l with6 | [ ] −> 07 | h : : t −> p r i n t _ i n t ( h 5) ; i t e r a t e t ; ;8

9 i t e r a t e f u n k l i s t e ; ;

Page 269: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten• Funktionen in imperativen Sprachen sind nichts anderes

wie Subroutinen• Deren Parameter müssen beim Funktionsaufruf alle

gleichzeitig festliegen• In der Mathematik und in funktionalen Sprachen gilt das

nicht:f (x) = x · y + z

gleichzeitiges Anwenden der Paramter:

f (3, 4, 5) = 3 · 4 + 5 = 17

partielle Anwendung:

f (3, y , z) = g(y , z) = 3 · y + z

partielle Anwendung auf die neue Funktion g:

g(4, z) = h(z) = 3 · 4 + z

Page 270: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten• Funktionen in imperativen Sprachen sind nichts anderes

wie Subroutinen• Deren Parameter müssen beim Funktionsaufruf alle

gleichzeitig festliegen• In der Mathematik und in funktionalen Sprachen gilt das

nicht:f (x) = x · y + z

gleichzeitiges Anwenden der Paramter:

f (3, 4, 5) = 3 · 4 + 5 = 17

partielle Anwendung:

f (3, y , z) = g(y , z) = 3 · y + z

partielle Anwendung auf die neue Funktion g:

g(4, z) = h(z) = 3 · 4 + z

Page 271: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten• Funktionen in imperativen Sprachen sind nichts anderes

wie Subroutinen• Deren Parameter müssen beim Funktionsaufruf alle

gleichzeitig festliegen• In der Mathematik und in funktionalen Sprachen gilt das

nicht:f (x) = x · y + z

gleichzeitiges Anwenden der Paramter:

f (3, 4, 5) = 3 · 4 + 5 = 17

partielle Anwendung:

f (3, y , z) = g(y , z) = 3 · y + z

partielle Anwendung auf die neue Funktion g:

g(4, z) = h(z) = 3 · 4 + z

Page 272: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten• Funktionen in imperativen Sprachen sind nichts anderes

wie Subroutinen• Deren Parameter müssen beim Funktionsaufruf alle

gleichzeitig festliegen• In der Mathematik und in funktionalen Sprachen gilt das

nicht:f (x) = x · y + z

gleichzeitiges Anwenden der Paramter:

f (3, 4, 5) = 3 · 4 + 5 = 17

partielle Anwendung:

f (3, y , z) = g(y , z) = 3 · y + z

partielle Anwendung auf die neue Funktion g:

g(4, z) = h(z) = 3 · 4 + z

Page 273: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten• Funktionen in imperativen Sprachen sind nichts anderes

wie Subroutinen• Deren Parameter müssen beim Funktionsaufruf alle

gleichzeitig festliegen• In der Mathematik und in funktionalen Sprachen gilt das

nicht:f (x) = x · y + z

gleichzeitiges Anwenden der Paramter:

f (3, 4, 5) = 3 · 4 + 5 = 17

partielle Anwendung:

f (3, y , z) = g(y , z) = 3 · y + z

partielle Anwendung auf die neue Funktion g:

g(4, z) = h(z) = 3 · 4 + z

Page 274: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten• Funktionen in imperativen Sprachen sind nichts anderes

wie Subroutinen• Deren Parameter müssen beim Funktionsaufruf alle

gleichzeitig festliegen• In der Mathematik und in funktionalen Sprachen gilt das

nicht:f (x) = x · y + z

gleichzeitiges Anwenden der Paramter:

f (3, 4, 5) = 3 · 4 + 5 = 17

partielle Anwendung:

f (3, y , z) = g(y , z) = 3 · y + z

partielle Anwendung auf die neue Funktion g:

g(4, z) = h(z) = 3 · 4 + z

Page 275: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten• Funktionen in imperativen Sprachen sind nichts anderes

wie Subroutinen• Deren Parameter müssen beim Funktionsaufruf alle

gleichzeitig festliegen• In der Mathematik und in funktionalen Sprachen gilt das

nicht:f (x) = x · y + z

gleichzeitiges Anwenden der Paramter:

f (3, 4, 5) = 3 · 4 + 5 = 17

partielle Anwendung:

f (3, y , z) = g(y , z) = 3 · y + z

partielle Anwendung auf die neue Funktion g:

g(4, z) = h(z) = 3 · 4 + z

Page 276: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten• Funktionen in imperativen Sprachen sind nichts anderes

wie Subroutinen• Deren Parameter müssen beim Funktionsaufruf alle

gleichzeitig festliegen• In der Mathematik und in funktionalen Sprachen gilt das

nicht:f (x) = x · y + z

gleichzeitiges Anwenden der Paramter:

f (3, 4, 5) = 3 · 4 + 5 = 17

partielle Anwendung:

f (3, y , z) = g(y , z) = 3 · y + z

partielle Anwendung auf die neue Funktion g:

g(4, z) = h(z) = 3 · 4 + z

Page 277: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten• Funktionen in imperativen Sprachen sind nichts anderes

wie Subroutinen• Deren Parameter müssen beim Funktionsaufruf alle

gleichzeitig festliegen• In der Mathematik und in funktionalen Sprachen gilt das

nicht:f (x) = x · y + z

gleichzeitiges Anwenden der Paramter:

f (3, 4, 5) = 3 · 4 + 5 = 17

partielle Anwendung:

f (3, y , z) = g(y , z) = 3 · y + z

partielle Anwendung auf die neue Funktion g:

g(4, z) = h(z) = 3 · 4 + z

Page 278: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten• Funktionen in imperativen Sprachen sind nichts anderes

wie Subroutinen• Deren Parameter müssen beim Funktionsaufruf alle

gleichzeitig festliegen• In der Mathematik und in funktionalen Sprachen gilt das

nicht:f (x) = x · y + z

gleichzeitiges Anwenden der Paramter:

f (3, 4, 5) = 3 · 4 + 5 = 17

partielle Anwendung:

f (3, y , z) = g(y , z) = 3 · y + z

partielle Anwendung auf die neue Funktion g:

g(4, z) = h(z) = 3 · 4 + z

Page 279: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten• Funktionen in imperativen Sprachen sind nichts anderes

wie Subroutinen• Deren Parameter müssen beim Funktionsaufruf alle

gleichzeitig festliegen• In der Mathematik und in funktionalen Sprachen gilt das

nicht:f (x) = x · y + z

gleichzeitiges Anwenden der Paramter:

f (3, 4, 5) = 3 · 4 + 5 = 17

partielle Anwendung:

f (3, y , z) = g(y , z) = 3 · y + z

partielle Anwendung auf die neue Funktion g:

g(4, z) = h(z) = 3 · 4 + z

Page 280: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten

• Die Umwandlung einer Funktion mit mehreren Argumentenin eine Funktion mit nur einem Argument wird Curryingoder auch Schönfinkeln genannnt.

• Namensgeber: Die Mathematiker Haskell Curry (US),Moses Isajewitsch Schönfinkel (RU)

Page 281: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten

• Die Umwandlung einer Funktion mit mehreren Argumentenin eine Funktion mit nur einem Argument wird Curryingoder auch Schönfinkeln genannnt.

• Namensgeber: Die Mathematiker Haskell Curry (US),Moses Isajewitsch Schönfinkel (RU)

Page 282: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten

• Die Umwandlung einer Funktion mit mehreren Argumentenin eine Funktion mit nur einem Argument wird Curryingoder auch Schönfinkeln genannnt.

• Namensgeber: Die Mathematiker Haskell Curry (US),Moses Isajewitsch Schönfinkel (RU)

Page 283: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten

Ein Beispiel in OCaml:

1 l e t avg a b = ( a+b ) / 2 ; ;2

3 l e t avg = ( fun a −> ( fun b −> ( a+.b ) / . 2 . ) ) ; ;

Page 284: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten

Ein Beispiel in OCaml:

1 l e t avg a b = ( a+b ) / 2 ; ;2

3 l e t avg = ( fun a −> ( fun b −> ( a+.b ) / . 2 . ) ) ; ;

Page 285: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Currying: Funktionen mit mehreren Argumenten

Ein Beispiel in OCaml:

1 l e t avg a b = ( a+b ) / 2 ; ;2

3 l e t avg = ( fun a −> ( fun b −> ( a+.b ) / . 2 . ) ) ; ;

Page 286: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Ist Java 8 eine funktionale Sprache?

Zwei Artikel (englisch):• http://java.dzone.com/articles/

whats-wrong-java-8-currying-vs• http://docs.oracle.com/javase/tutorial/java/

javaOO/lambdaexpressions.html

Page 287: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Ist Java 8 eine funktionale Sprache?

Zwei Artikel (englisch):• http://java.dzone.com/articles/

whats-wrong-java-8-currying-vs• http://docs.oracle.com/javase/tutorial/java/

javaOO/lambdaexpressions.html

Page 288: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Ist Java 8 eine funktionale Sprache?

Zwei Artikel (englisch):• http://java.dzone.com/articles/

whats-wrong-java-8-currying-vs• http://docs.oracle.com/javase/tutorial/java/

javaOO/lambdaexpressions.html

Page 289: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Ist Java 8 eine funktionale Sprache?

Lösung zum Oracle-Beispiel in Ocaml:

1 l e t rec f i l t e r l i s t f g =2 match l i s t with3 | [ ] −> [ ]4 | ( mai l , laenderCode , gebur tsJahr ) : : t −>5 i f ( ( f laenderCode ) && ( g gebur tsJahr ) )6 then ( mai l , laenderCode , gebur tsJahr ) : : f i l t e r

t f g7 else f i l t e r t f g8 ; ;9

10 f i l t e r pe rsoL i s t ( fun x −> x=" us " ) ( fun x −> x>1950) ) ; ;

11 f i l t e r pe rsoL i s t ( fun x −> x=" de " ) ( fun x −> x=1910) ) ; ;

Page 290: Einführung in die Funktionale Programmierungdt.wara.de/pdf/sae/programmierung/ocaml/praesentation.pdf · ca. 2005 herum zurück. Aber hier geht es um den Einstieg in die funktionale

Welche funktionale Sprache wählen wir? Einführung: wo liegt der Unterschied zur imperativen Programmierung Recursion Wichtige Eigenschaften von OCaml

Danksagung

Vielen Dank für’s Zuhören und Mitmachen!