Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung, noch irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und etwaige Hinweise auf Fehler sind Verlag und Autor dankbar. Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulässig.
Das Werk einschließlich all seiner Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Das gilt insbesondere für Verfielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeisung, Verarbeitung und Verbreitung in elektronischen Systemen.
Meiner Frau Ursula und meinen Söhnen Thomas und Johannes in Liebe gewiedmet
Inhaltsverzeichnis
Vorwort
1 Einführung
1.1 Konstitutive Prinzipien in A++
Abstraktion
Referenz
Synthese
Closure
Lexical Scope
2 Sprachdefinition
2.1 Syntax und Semantik von A++
Anmerkungen zur Syntax:
2.2 Beispiele zur Syntax von A++
Beispiele zur Abstraktion 1. Alternative in 2.2
Beispiele zur Abstraktion 2. Alternative in 2.2
Beispiele zur Referenz 2.3
Beispiele zur Synthese 2.4
2.3 A++ Erweiterung
Syntax von A++ mit vorgegebenen Primitiv-Abstraktionen
Beispiele zu den Erweiterungen in A++
3 Erste Entfaltung von A++
3.1 Programmierstil in A++
3.2 Grundlegende Logische Abstraktionen
Abstraktionen ‘true’ und ‘false’
Abstraktionen ‘lif’
3.3 Erweiterte Logische Abstraktionen
3.4 Numerische Abstraktionen
Abstraktion für die Zahl ‘0’
Abstraktion für die Zahl ‘1’
Abstraktion für die Zahl ‘2’
Abstraktion für das Prädikat ‘zerop’
Abstraktion für die Zahl ‘3’
Utility-Abstraktion ‘compose’
Abstraktion für die Addition
Abstraktion für die Inkrementierung
Abstraktion für die Multiplikation
3.5 Abstraktionen für Listen
Abstraktion für den Konstruktor
Abstraktion für den Selektor ‘lcar’
Abstraktion für den Selektor ‘lcdr’
Anwendung der grundlegenden Operationen für Listen
Abstraktion für das Ende einer Liste
Abstraktion für das Prädikat ‘nullp’
Abstraktion für die Längenabfrage
Abstraktion zum Entfernen eines Objektes aus einer Liste
3.6 Erweiterte Arithmetische Abstraktionen
Abstraktion für ‘zeropair’
Abstraktion für die Dekrementierung
Abstraktion für die Subtraktion
3.7 Relationale Abstraktionen
Abstraktion für das Prädikat ‘gleich’
Abstraktion für das Prädikat ‘größer als’
Abstraktion für das Prädikat ‘kleiner als’
Abstraktion für das Prädikat ‘größer gleich’
3.8 Funktionen Höherer Ordnung
Abstraktion ‘compose’
Abstraktion für die ‘curry’-Funktion
Abstraktion für die Abbildung einer Liste
Abstraktion für die ‘curry map’-Funktion
Abstraktion für die Auswahl aus einer Liste
Abstraktion für die Suche nach einem Objekt in einer Liste
3.9 Mengen-Operationen
Abstraktion für das Prädikat ‘memberp’
Abstraktion für das Hinzufügen eines Elementes
Abstraktion für die Vereinigung von Mengen
4 Erste Anwendung von A++
4.1 Utility-Abstraktionen
Abstraktion für das sortierte Einfügen in eine Liste
Abstraktion für die Sortierung
4.2 Rekursion
Abstraktion für die Berechnung der Fakultät
Abstraktion für die Summation
Abstraktion für den Zugriff auf ein Element einer Liste
Abstraktion für die Iteration über die Elemente einer Liste
4.3 Imperative Programmierung in A++
Die Abstraktion ’while’ in A++
5 Objekt-Orientierte Anwendung von A++
5.1 Einleitung
Bildung von Klassen
Instanzen von Klassen
Beispiele für Objekt-orientierung in A++
5.2 Erstes Beispiel zur Objektorientierung in A++
Konstruktor für Objekte der Klasse “account”
Erzeugung des Objektes “acc1” durch Aufruf von “make-account”
Senden der Botschaft “deposit” an das Objekt “acc1”
Ausführen der Funktion “deposit”
Detaillierter Code in A++
Anmerkungen zu dem ersten Beispiel zur Objektorientierung
Anmerkungen zum Aufruf der Funktion ‘konto’
5.3 Zweites Beispiel zur Objektorientierung in A++
Anmerkung zu den einzelnen Klassen
Beziehungen zwischen den Klassen
Zusammenfassung
5.4 Drittes Beispiel zur Objektorientierung in A++
Anmerkung zu den einzelnen Klassen
6 Abstraktion, Referenz und Synthese im Detail
6.1 Addition der zwei Zahlen ‘two’ und ‘three’
Synthese von ‘add’ und ‘two three’ (1)
Abstraktion von ‘add’ (1)
Auflösung der Referenz von ‘add’ in [1]
Synthese von (lambda(m n) ... ) und ‘two three’ in [3]
Abstraktion von ‘compose’
Auflösung der Referenz von ‘compose’ in [4]
Synthese von (lambda(f g) ...) und ‘(two f) (three f)’ in [6]
Abstraktion von three:
Auflösung der Referenz von ‘three’ in [7]
Synthese von (lambda(f) ...) und ‘f’ in [9]
Synthese von (lambda(x) ...) und ‘x’ in [10]
Abstraktion von two:
Auflösung der Referenz von ‘two’ in [11]
Synthese von (lambda(f) ...) und ‘f’ in [13]
Synthese vom inneren (lambda(x) ...) und ‘(f (f (f x)))’ in [14]
6.2 Multiplikation der zwei Zahlen ‘two’ und ‘three’
Synthese von mult und ‘two three’
Abstraktion von mult:
Auflösung der Referenz von ‘mult’ in [17]
Synthese von (lambda(m n) ... ) und ‘two three’ in [19]
Abstraktion von compose:
Auflösung der Referenz von ‘compose’ in [20]
Synthese von (lambda(f g) ...) und ‘two three’ in [22]
Abstraktion von two:
Abstraktion von three:
Auflösung der Referenz von ‘two’ und ‘three’ in [23]
Synthese vom inneren (lambda(f) ...) und ‘x’ in [26]
Synthese von (lambda(f) ...) und ‘(lambda(x0) ...)’ in [28]
Synthese vom inneren (lambda(x0) ...) und ‘x1’
Synthese von (lambda(x0) ...) und ‘(x(x(x x1)))’
Umbenennung der Variablen: x –> f und x1 –> x
7 Infrastruktur für A++
7.1 Support-Funktionen
Abstraktion für die Ausgabe einer Zahl
Abstraktion für die Ausgabe eines boole’schen Wertes
Abstraktion für die Ausgabe von Listen
7.2 A++ Interpreter
Linux
MS-Windows
Programmbeendigung
7.3 Initialisierungsdatei für den ARS-Interperter
7.4 WWW-Adressen
8 Erweiterung von A++
8.1 ARS++
8.2 ARSAPI
Anhänge
A Das Lambda-Kalkül
A.1 Syntax eines Lambda-Ausdrucks
A.2 Begriffe und Regeln des Lambda-Kalküls
Assoziativitätsregeln
Gebundene und freie Variable
Alpha-Konvertierung
Beta-Reduktion
Eta-Reduktion
Y-Kombinator
A.3 Beispiele für Beta-Reduktion
Lambda-Kalkül-Programmierung in Scheme-Codierung
Auszuwertende Lambda-Ausdrücke in Scheme-Codierung
Basis-Abstraktionen in Scheme-Codierung.
Anwendung mit Beta-Reduktion
B Gültigkeitsbereich von Namen
B.1 Interpretation von Namen
Dynamic Scope
Static Scope
Global Scope
Local Scope
B.2 Auswirkung der Art der Symbolinterpretation auf die Programmierung
Auswirkung von „Dynamic Scope“ auf die Programmierung
Auswirkung von „Static Scope“ auf die Programmierung
Verdeutlichung der Unterschiede von „dynamic scope“ und „lexical scope“ anhand von Beispielen
Schlusswort
Biographische Daten zur Person des Autors
Verzeichnis der Fundamentalbegriffe
Abbildungsverzeichnis
Listings
Literaturverzeichnis
Index
Vorwort
Zweck des Buches
In diesem kleinen Büchlein, geht es primär darum an der Programmierung interessierten Leserinnen und Lesern ein Instrument vorzustellen, mit dem sie sehr schnell und sehr effizient Programmieren lernen können, ohne sich schon für eine der populären, voll-ausgebauten Programmiersprachen entscheiden zu müssen und ohne einen großen Kostenaufwand zu haben.