Die Programmiersprache APL(Array Processing Language)
Was ist APL?
APL heißt: "A Programming Language" wird aber mittlerweile auch als "Array Processing Language" bezeichnet. Zurecht wie ich meine!!!
APL ist jedoch nicht irgendeine Programmiersprache.
APL ist ganz anders als herkömmliche Programmiersprachen wie C++, C, VB,
Java, COBOL, etc. Dieser Unterschied hat APL bis heute viele Freunde, aber
auch vehemente Gegner geschaffen. So erfreut sich APL auf der einen Seite
wachsender Beliebtheit in so unterschiedlichen Anwendungsbereichen wie
Web-Applikationen, in kommerziellen Anwendungssystemen und
mathematisch-wissenschaftlichen Anwendungen, bis hin in den Bereich der
gemeinen Windows-Programmierung(vor allem mit der von mir favorisierten
Variante von DyalogAPL);
auf der anderen Seite gibt es Entwickler, die APL
allein wegen seiner speziellen Symbole und des Fehlens ihrer Meinung nach
bedeutsamer Strukturelemente wie z.B. Datendeklarationen ablehnend
gegenüberstehen(völlig unverständlich!!!).
Also, entweder man liebt es oder man hasst es.
Der Name APL verbindet sich mit dem Buch von Kenneth E. Iverson "A
Programming Language" aus dem Jahre 1962, in dem erstmals eine Notation
definiert wurde, um mathematische Algorithmen und Abläufe einer elektronischen Datenverarbeitungsanlage zu beschreiben.
Aus dieser Zeit stammt bereits die Idee, Symbole für Funktionen zu verwenden
und diese Funktionen auf komplexe Strukturgrößen, Vektoren und Matrizen anzuwenden.
Während der ersten praktischen Anwendungen dieser Notation wurde eine Reihe
von Vereinfachungen und Verallgemeinerungen eingeführt und
Unregelmäßigkeiten, die zum Teil aus der üblichen mathematischen
Formulierungsweise stammten, eliminiert.
Beispiele hierfür sind die Verwendung eines einzigen Symbols zur Bezeichnung
einer Funktion , beispielsweise die Absolutwert Funktion:
Mathematik:
|A|
APL:
|A
und der vollständige Verzicht auf Funktionshierarchien, wie "Punktrechnung
geht vor Strichrechnung" zugunsten einer strikten Rechts-nach-links Ausführungsreihenfolge:
Mathematik:
10*10+10=110
APL:
10*10+10=200
Dies sind unabdingbare Voraussetzungen für eine Sprache mit so mächtigem Vorrat
an Elementarfunktionen, der durch benutzerdefinierte Funktionen beliebig
erweitert werden kann und so keinen Überblick über individuelle
Vorrangregeln mehr erlaubt.
APL ist ein Interpreter, dies hat einige Vorteile!
Man sieht sofort Ergebnisse und kann interaktiv Programmteile testen. So kann man nach der Installation der Entwicklungsumgebung sofort die ersten Programmzeilen eingeben und nur durch betätigen der Eingabetaste wird die Zeile ausgeführt.
Um die fehlerträchtigen Pointer muß man sich in APL nicht kümmern! Werden jedoch für etwaige API-Funktionen oder sonstige Schnittstellen Pointer benötigt, so ist das (meistens und mit etwas Übung)kein Problem.
Auch kann man nach dem Tippen der ersten Programmzeile den Debugger starten. Als ich anfing auch Compiler-Sprachen zu verwenden war für mich ein ziemliches Problem, daß ich dort zunächst eine "debugfähige" Version meiner Software benötigte. Bei APL ist das anders.
Stoppt man das Programm an einem Breakpoint, so kann man den Inhalt der Variablen betrachten, diesen direkt manipulieren, Programmzeilen ändern und danach das Programm weiterlaufen lassen.
Zugegeben diese Möglichkeiten verführen den Programmierer dazu, "erst einmal anzufangen" und die detaillierte und konzeptionelle Planung eines Projekts im Vorfeld zu unterlassen.
Aber, ist das schlimm!?!?!
Gerade im Prototyping liegt auch eine der Stärken von APL. Ich muß mir natürlich auch Gedanken über die Realisierung eines Problems machen, in der Zeit, in der ich allerdings ein 100seitiges Schriftstück (ein sogenanntes Fachkonzept) erstelle, hab ich in APL meist das Problems längst gelöst!
Auch können meine Anwender so ganz einfach in die Entwicklung Ihres Programms mit einbezogen werden. Eine schnelle Reaktion auf Anwenderwünsche ist und war schon immer ein enormer Wettbewerbsvorteil.
Ich für meinen Teil habe durchaus Erfahrungen mit anderen Programiersprachen. Deshalb habe ich auch auf meiner Seite einen weiteren Abschnitt für C und C++ vorgesehen. Ich bin auch der Meinung, daß es für jedes Projekt die Ideale Programmiersprache gibt. Die Realisierungs-Geschwindigkeit und damit die Produktivität eines Programmierers ist aber ein Hauptargument für die Wahl der verwendeten Sprache und diesbezüglich ist APL unschlagbar.
Je nach Projekt geht es um einen Faktor 5-10 gegenüber den so beliebten Compiler-Sprachen.
Nun jedoch zur Sprache selbst:
In APL arbeitet man mit Funktionenund Operatoren, wobei Funktionen auf Daten angewendet werden, Operatoren aber immer auf Daten und Funktionen.
Beipiel, die Anwendung der Funktion "Plus":
12+2
14
Beispiel, die Anwendung des Operators "Reduce" auf die Funktion "Plus" dies bewirkt, daß alle Werte eines Arrays addiert werden.:
+/12 2 3 5
22
Diese Art der Darstellung führt zu sehr kurzen Programmen, die ungeheuer viel bewirken können.
Auch Matrizen können auf diese Art verarbeitet werden.
Angenommen wir haben in einer Variable A die monatlichen Verkauferlöse(in TDM) unserer zwei Handelsvertreter gespeichert. Wobei eine Zeile einen Vertreter und jedes Monat durch eine Spalte dargestellt wird.
A
10 12 11 13 10 16 12 10 12 11 13 10
16 10 10 10 12 15 15 15 14 12 10 10
Ich möchten nun für jeden Vertreter den gesamten Jahresumsatz bzw. den monatlichen Gesamtumsatz errechen. Hierzu muß ich dem Interpreter sagen entlang welcher Achse er die Matrix addieren soll.
gesamten Jahresumsatz pro Vetreter:
+/[2]A
140 149
monatlichen Gesamtumsatz:
+/[1]A
26 22 21 23 22 31 27 25 26 23 23 20
Um den gesamten Umsatz des Jahres zu errechnen, wandele ich zunächst die Matrix in einen
Vektor um und addiere die Werte.
+/,A
289
Na! erstaunt?
Das ist ja einfach, oder?
Das ist aber lange noch nicht alles was APL zu bieten hat, hier noch ein paar Beispiele für die Mächtigkeit der Sprache:
Ein paar kleine Beispielprogrämmchen
Nun nachdem ich im oberen Abschnitt ein bißchen was über die Programmiersprache erzählt habe und ich auch immer betont habe das mit dieser Programmiersprache ungeheur kurze Programme schreiben kann, will ich das nun einmal anhand einiges Beispiels demonstrieren:
Bald schreiben wir das Jahr 2002 und dann wissen ja alle was los ist.
Wir freuen uns alle auf den "demokratisch legitimierten", "nur wirtschaftliche Vorteile bringenden",
"unseren Urlaub vereinfachenden", "stabilen" ,...Euro.(Harr, Harr, selten so gelogen!)
"Denn sie wissen nicht was sie tun!"
Meine Meinung!
Egal, zumindest stieß ich mal auf folgendes Problem:
In einer Tabelle sollten sämtliche Währungen aller Euro-Länder über den Euro-Kurs umrechenbar in die jeweilige währung der anderen Länder sein.
Kurz und gut, es soll folgendes erscheinen:
EUR BEF DEM ESP FRF IEP ITL LUF
1 EUR 1 40.3399 1.95583 166.386 6.55957 0.78756 1936.27 40.3399
1 BEF 0.02478 1 0.04848 4.1246 0.1626 0.01952 47.9988 1
1 DEM 0.51129 20.6254 1 85.0718 3.35385 0.40267 989.999 20.6254
100 ESP 0.60101 24.2447 1.17547 100 3.94238 0.47333 1163.72 24.2447
1 FRF 0.15244 6.14977 0.29816 25.3653 1 0.12006 295.182 6.14977
1 IEP 1.26973 51.2211 2.48339 211.266 8.32893 1 2458.55 51.2211
1000 ITL 0.51645 20.8338 1.0101 85.9311 3.38773 0.40674 1000 20.8338
1 LUF 0.02478 1 0.04848 4.1246 0.1626 0.01952 47.9988 1
1 NLG 0.45378 18.3054 0.88751 75.5026 2.9766 0.35738 878.641 18.3054
1 ATS 0.07267 2.93161 0.14213 12.0917 0.4767 0.05723 140.714 2.93161
1 PTE 0.00498 0.20121 0.00975 0.82992 0.03271 0.00392 9.65807 0.20121
1 FIM 0.16818 6.78468 0.32894 27.9841 1.10324 0.13245 325.657 6.78468
NLG ATS PTE FIM
2.20371 13.7603 200.482 5.94573
0.05462 0.3411 4.96981 0.14739
1.12673 7.03552 102.504 3.04
1.32445 8.2701 120.492 3.57345
0.33595 2.09774 30.5632 0.90642
2.79813 17.4719 254.559 7.54951
1.13812 7.1066 103.54 3.07071
0.05462 0.3411 4.96981 0.14739
1 6.24415 90.9747 2.69805
0.16014 1 14.5695 0.43209
0.01099 0.06863 1 0.02965
0.37063 2.31431 33.7186 1
Man kann also nun über die jeweiligen Spalten und Zeilen alle Währungen auf 6 Stellen gerundet in eine beliebige andere Rechnung umrechnen. (z.B. 1 DM = 989,999 Italienisch Lira)
Dieses Problem ist wie geschaffen um es mit APL zu realisieren.
Als Basis nehme ich folgende Tabelle und weis ihr den Namen
Tab zu. Sie zeigt die jeweiligen Euro-Umrechnungskurse der einzelnen Länder.
1 1 EUR 1 40.3399 BEF 1 1.95583 DEM 100 166.386 ESP 1 6.55957 FRF 1 0.787564 IEP 1000 1936.27 ITL 1 40.3399 LUF 1 2.20371 NLG 1 13.7603 ATS 1 200.482 PTE 1 5.94573 FIMNun zur Ralisierung des ganzen
