Hallo,
es ist schon 35 Jahre her, da veröffentlichte John Backus (bekannt von FORTRAN und BNF) anlässlich
zum ACM Turing Award 1977 seinen Aufsatz "
Can Programming Be Liberated from the von Neumann Style?
A Functional Style and Its Algebra of Programs" [1]. In diesem Aufsatz beschreibt er einen
Kombinator-Stil, den er damals FP-Systeme nannte. Später nannte er diesen Programmierstil
Function-Level Programming. Es werden kleine Programme mittels Kombinatoren zu größeren Programmen
zusammengebaut.
Ich habe eine
Unit in Delphi erstellt, die ein FP-System verarbeitet, das als Datenstruktur nur die
verkettete Liste unterstützt. Dabei liegt ein Function-Level-Programmtext als txt- oder fp-Datei vor
und wird beim Start des Programms in verkettete Listen compiliert, die Funktionsbezeichnern zugeordnet
werden, dann wird das Programm, das ja als Listen vorliegt von einem Interpreter verarbeitet.
Als Vereinfachung habe ich die Infix-Notation gewählt: der Interpreter kennt nur Funktionen und
Operatoren in Infixschreibweise, die zudem rechtsassoziativ sind.
Eine kleine Zusammenstellung zu Function-Level-Programming ist hier zu finden:
http://dl.dropbox.com/u/17011839/FLinks.html
Ein Download eines Archivs mit dem Interpreter und Beispielprogrammen und zudem der Delphi-
Unit
(vmunit.pas im Unterordner Delphi XE2) ist im heise Software-Verzeichnis zu finden:
http://www.heise.de/download/fpr-1168853.html
Die
Unit vmunit.pas ist leider wenig dokumentiert und einige Variablen sind auf einen
implementierten Garbage-Collector ausgerichtet. Der Interpreter duldet nach außen keine Seiteneffekte,
ist also referentiell Transparent.
[Update:] Als Reaktion auf die Kritik in der vorherigen Projektvorstellung ist das Programm
in eine
Unit für die VM und für die
GUI unterteilt worden. Die Guiunit ist für die Seiteneffekte
und das Formular zuständig.
Die
Unit vmunit.pas für das FP-System ist unterteilt in
- Schnittstelle
- Konstanten
- Automatische Speicherverwaltung
- Umwandlung von Listendarstellung in Textdarstellung
- Compiler (Pre- und Post-Compilierung)
- Prädikate
- FPr-Interpreter und Primitive (größter Abschnitt)
- Initialisierung
MfG Stefan
[1]
http://www.thocp.net/biographies/pap...rd_lecture.pdf