Detailansicht

Einführung in die funktionale Programmierung mit Miranda

ISBN/EAN: 9783519022879
Umbreit-Nr.: 7018625

Sprache: Deutsch
Umfang: xiv, 347 S., 10 s/w Illustr., 347 S. 10 Abb.
Format in cm:
Einband: kartoniertes Buch

Erschienen am 01.11.1991
Auflage: 1/1991
€ 49,99
(inklusive MwSt.)
Lieferbar innerhalb 1 - 2 Wochen
  • Zusatztext
    • MIRA. You have often Begun to tell me what I am; but stopp 'd, And teft me to a bootless inquisition, Concluding, Stay; not yet. ' PRO. The how"'" now come ,. The very minute bids thee ope thine car. "The Tempest" von William Shakespeare (Akt 1, S:;cnc 1) Das vorliegende Buch ist aus Begleitmaterialien zu einem Programmierkurs entstanden, den ich im Sommersemester 1991 an der Universität Bonn gehalten habe. Es beschreibt grundlegende und weiterführende Kom;epte der funktionalen l Programmierung und der Programmiersprache Miranda. Eine rein funktionale Sprache wie Miranda ist aus mindestens drei Gründen eine interessante und faszinierende Alternative sowohl zu herkömmlichen, impera­ tiven Sprachen als auch zu hybriden Sprachen wie LISP oder Scheme, die neben einem funktionalen Kern viele imperative Konstrukte inkorporieren. 1. Funktionale Programme sind kürzer, einfacher zu verstehen und besitzen ei­ nen höheren Abstraktionsgrad als korrespondierende imperative Programme. 2. Sie sind einer mathematischen Behandlung einfacher zugänglich. 3. Die angenehmen mathematischen Eigenschaften (Funktionen sind Funktio­ nen im mathematischen Sinn) erleichtern eine Implementierung auf paralle­ len Rechnerarchitekturen. Insbesondere der letzte Punkt eröffnet für die Zukunft vielversprechende Perspek­ tiven. Miranda verkörpert die Tugenden funktionaler Sprachen in besonderer Weise. Die Syntax ist prägnant und frei von syntaktischem Ballast. Funktionen wie Typen werden mittels (rekursiver) Gleichungen definiert. Muster auf der linken Seite von Funktionsdefinitionen fördern die Lesbarkeit der Definitionen.
  • Autorenportrait
    • Inhaltsangabe1 Einleitung.- 1.1 Eigenschaften funktionaler Sprachen.- 1.2 Überblick über Miranda.- 1.3 Warum nicht LISP oder Scheme?.- 1.4 Literaturhinweise.- 2 Vordefinierte Typen.- 2.1 Der Typ num.- 2.2 Der Typ bool.- 2.3 Der Typ char.- 2.4 Tupeltypen.- 2.5 Listentypen.- 2.6 Funktionale Typen.- 2.7 Miranda-System.- 2.8 Syntax.- 3 Definitionen.- 3.1 Skalare Definitionen.- 3.1.1 Die Offside-Regel.- 3.1.2 Bewachte Ausdrücke.- 3.1.3 Pattern-Matching.- 3.1.4 DIY-Infix-Operatoren.- 3.2 Konforme Definitionen.- 3.3 Lokale Definitionen.- 3.4 Syntax.- 4 Typsystem.- 4.1 Parametrisierter Typpolymorphismus.- 4.2 Typinferenz.- 4.3 Wertespezifikationen.- 4.4 Typsynonyme.- 4.5 Die generische Funktion show.- 4.6 Literaturhinweise.- 4.7 Syntax.- 5 Funktionen höherer Ordnung.- 5.1 Partiell parametrisierte Funktionen.- 5.2 Operator-Sections.- 5.3 Generische Funktionen.- 5.4 Funktionen als Datenstrukturen.- 5.5 Implementierung von Rekursionsmustern.- 5.5.1 map und map2.- 5.5.2 filter, dropwhile und takewhile.- 5.5.3 foldr und foldl.- 5.5.4 Kontrollstrukturen.- 5.6 Literaturhinweise.- 5.7 Syntax.- 6 List-Comprehensions.- 6.1 Einfache List-Comprehensions.- 6.2 Iterative Generatoren.- 6.3 Diagonalisierende List-Comprehensions.- 6.4 Syntax.- 7 Benutzerdefinierte Typen.- 7.1 Algebraische Datentypen.- 7.1.1 Aufzählungstypen.- 7.1.2 Disjunkte Vereinigungen.- 7.1.3 Rekursive Datentypen.- 7.1.4 DIY-Infix-Operatoren.- 7.2 Abstrakte Datentypen.- 7.3 Platzhaltertypen.- 7.4 Literaturhinweise.- 7.5 Syntax.- 8 Lazy Evaluation.- 8.1 Eager Evaluation versus Lazy Evaluation.- 8.2 Nichtstrikte Funktionen.- 8.3 Backtracking-Probleme.- 8.3.1 Das n-Damen-Problem.- 8.3.2 Das Springer-Problem.- 8.4 Kombinator-Parsing.- 8.5 Von Prolog zu Miranda.- 8.6 Unendliche Datenstrukturen.- 8.6.1 Simulation von synchronen Schaltwerken.- 8.6.2 Netzwerke kommunizierender Prozesse.- 8.6.3 Primzahlen.- 8.6.4 Memotabellen.- 8.7 Programmierung mit Unbekannten.- 8.8 Steuerung der Auswertung.- 8.9 Literaturhinweise.- 9 Programmierung im Großen.- 9.1 %include- und %export-Direktive.- 9.1.1 %include-Direktive.- 9.1.2 %export-Direktive.- 9.2 Parametrisierte Module.- 9.2.1 Verwaltung von Binärbäumen.- 9.2.2 Prioritäts-Parser.- 9.3 Software-Engineering.- 9.4 Programmierrichtlinien für Miranda.- 9.5 Literaturhinweise.- 9.6 Syntax.- 10 Interaktive Programme.- 10.1 Eingabe.- 10.2 Interpretierte Eingabe.- 10.3 Ausgabe.- 10.4 Einbindung in UNIX.- 10.5 Fortsetzungsbasierte Ein- und Ausgabe.- 10.6 Literaturhinweise.- A Kleine Projekte.- A.1 Taschenrechner.- A.2 Datenbank.- A.3 KWIC-Index.- A.4 Textformatierung.- B Blaise-Compiler.- B.1 Ziel des Projektes.- B.2 Projektbeschreibung.- B.2.1 Definition von Blaise.- B.2.2 Definition der Zielmaschine.- B.2.3 Programmierumgebung.- B.3 Projektorganisation.- B.3.1 Gruppe 1: Lexikalische Analyse und Symboltabelle.- B.3.2 Gruppe 2: Syntaktische Analyse.- B.3.3 Gruppe 3: Codeerzeugung.- B.3.4 Gruppe 4: Interpreter und Programmierumgebung.- Literatur.