APL (Programmiersprache)
APL, abgekürzt für A Programming Language, ist eine üblicherweise interpretierte Programmiersprache. Sie wurde von Kenneth E. Iverson und seinen Kollegen bei IBM in der 60er Jahren als algorithmische Notation entwickelt. Einige Jahre später wurde APL als Programmiersprache auf Großrechnern implementiert und den Kunden als Timesharing-Option angeboten. Zu jener Zeit wurden IBM-Kugelkopf-Schreibmaschinen als ?Terminal? verwendet. Die ersten Implementierungen auf PCs benötigten ein Spezial-EPROM, damit der APL-Zeichensatz angezeigt werden konnte. Eine Vorläufer-Implementierung gab es schon 1975 auf der IBM 5100. Heute reicht die Installation eines APL-Zeichensatzes aus. Außerdem wurden seinerzeit spezielle Tastaturen verwendet, die später durch eine Bildschirmanzeige der Tastaturbelegung ersetzt wurden.Besonderheiten
Interaktivität
APL ist interaktiv: nach der Eingabe eines Befehls bzw. einer Reihe von Befehlen drückt man
Programmcode
Folgen von Befehlen lassen sich zu Programmen zusammenfassen. Bis in die neunziger Jahre fehlten APL Kontrollstrukturen. Logik musste durch Sprunganweisungen realisiert werden, was zu schwer les- und wartbaren Programmen führte.
Datentypen
APL kennt die Datentypen Char, Bool, Int und Float, allerdings muss der Programmierer dies nicht unbedingt wissen beziehungsweise berücksichtigen, denn der Interpreter wandelt die Datentypen automatisch um, wann immer dies notwendig ist. Dies bedeutet auch, dass APL keine Typenprüfung kennt.
Speicherverwaltung
Auch die Speicherverwaltung wird vom Interpreter übernommen. Ein APL-Programmierer muss sich weder um das Reservieren noch um das Freigeben von Speicher kümmern.
Array-Verarbeitung
Fast alle Funktionen in APL sind non-skalar ausgelegt. Dies bedeutet, dass Funktionen nicht nur auf einzelne Skalare, sondern auch auf Vektoren, Matrizen und vieldimensionale Daten angewendet werden können.
Beispiele
In jeder Programmiersprache geht dies:
2 + 3
5
In APL geht aber auch:
2 3 4 + 3
5 6 7
und auch dies:
2 3 4 + 5 6 7
7 9 11
Ausführung und Rangfolge
Es gibt in APL nur eine einzige Rangfolgenregel: alles wird von rechts (!) nach links abgearbeitet. Eine selbstverständliche Ausnahme: Ausdrücke in Klammern werden zuerst abgearbeitet. Daher gilt:
10×2+3
50
aber:
(10×2)+3
23
Funktionen und Operatoren
APL kennt sowohl Funktionen als auch Operatoren, aber die Bedeutung der Begriffe ist anders als in der Mathematik: Funktionen werden auf Daten angewendet, Operatoren auf Funktionen und Daten. Funktionen liefern Daten zurück, Operatoren sogenannte ?abgeleitete Funktionen? (engl.: ).
Beispiel
Das Zeichen Slash (/) steht für den Operator Reduce. Operatoren erwarten einen oder zwei Operanden. Wird nur ein Operand verwendet, dann muss er links neben dem Operator stehen:
+/
In diesem Beispiel ist der Operand die Funktion ?Plus?. Zusammen mit dem Operator wird die abgeleitete Funktion Summiere gebildet.
Angewendet auf einen Vektor:
+/ 3 4 5
bewirkt der Operator Reduce, dass der Operand zwischen die einzelnen Bestandteile des Vektor eingefügt wird. Abstrakt ausgedrückt:
f/ n1 n2 n3
n1 f n2 f n3
und im konkreten Beispiel:
+/ 3 4 5
3 + 4 + 5Wie mächtig dieses Konzept ist, wird aber erst bei Betrachtung eines anderen Operators klar: Expand (Backslash, \) verwendet den Operanden in der gleichen Weise wie Reduce, gibt aber Zwischenergebnisse aus:
+\ 3 4 5
3 7 12
Weitere Beispiele
x/ 3 4 5
60
x\3 4 5
3 12 60
-/3 4 5
4
-\3 4 5
3 ¯1 4
Selbstverständlich gibt es auch Operatoren, die zwei Operanden verlangen. Der Operator Outer Product (.) ist ein solcher Operator. Verwendet man als Operanden die Funktionen Plus (+) und Mal (x), dann entsteht in APL die Matritzenmultiplikation:
1 2 3 +.x 40 50 60
320Das funktioniert genauso mit Matrizen. Um dies zu demonstrieren, sind in dem Bild einige Zeilen aus einer APL-Dyalog APL
• APL2000 (ehemals STSC, Manugistics)
• Solition (ehemals I.P.Sharp)
• IBM's APL2
• MicroAPL
• J
Periodika
• Vector - englischsprachige APL-Publikation
Über APL
• APL Wiki
• APL-Germany e.V. - Deutsche Anwendervereinigung
• Über APL
• Leichtverständliche Einführung in APL
• Microsoft über .NET-Sprachen

