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:

APL: und der vollständige Verzicht auf Funktionshierarchien, wie "Punktrechnung geht vor Strichrechnung" zugunsten einer strikten Rechts-nach-links Ausführungsreihenfolge:

Mathematik: APL:
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":


Beispiel, die Anwendung des Operators "Reduce" auf die Funktion "Plus" dies bewirkt, daß alle Werte eines Arrays addiert werden.:

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:
Beispiele

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   FIM
   
Nun zur Ralisierung des ganzen

Zurück zur Hompage ©Webmaster@Boder.de E-Mail an den Autor