J (Programmiersprache)
J ist eine rein funktionale Programmiersprache, welche Anfang der 1990er Jahre von Kenneth E. Iverson und Roger Hui entwickelt wurde. Sie basiert direkt auf der von Iverson entwickelten Programmiersprache APL und den von John W. Backus entworfenen Programmiersprachen FP und FL.
J | |
---|---|
Paradigmen: | Rein funktionale Programmiersprache |
Erscheinungsjahr: | 1990 |
Designer: | Kenneth E. Iverson[1] |
Entwickler: | JSoftware |
Aktuelle Version: | J903 (28. Januar 2022[2]) |
Typisierung: | schwach |
Beeinflusst von: | APL, FP und FL |
Betriebssystem: | Windows, Linux, macOS, Pocket PC |
Lizenz: | GPLv3 |
Jsoftware.com |
Da J eine im Umgang mit Arrays, und dementsprechend auch mit Matrizen, mächtige Sprache ist, ist sie besonders zur Lösung mathematischer und statistischer Probleme geeignet. Des Weiteren ist J MIMD (Multiple Instruction, Multiple Data)-fähig.
Im Gegensatz zu vielen anderen Sprachen, die objektorientierte Programmierung erlauben, wird durch das flexible, hierarchische Namensraum-Schema von J sowohl klassenbasierte als auch prototypenbasierte Programmierung ermöglicht.
Zwar basiert J auf APL, welches Sonderzeichen im Quelltext erfordert, verwendet aber nur Befehle und Operanden, die aus Zeichen im Bereich des ASCII-Zeichensatzes bestehen. Somit werden einige Probleme, die bei der Codierung von Sonderzeichen im Quelltext entstehen können, umgangen.
Obwohl J der MIMD-Architektur und nicht der Von-Neumann-Architektur entspricht, lässt sie sich auch wie eine Von-Neumann-Sprache verwenden.
Beispielcode
Der folgende Code berechnet das arithmetische Mittel (den „Durchschnitt“) eines Arrays.
avg=: +/ % #
avg 1 2 3 4
Ausgabe: 2.5
Die Definition der Funktion avg
macht vom Konzept des Tacit programming (dt. Implizite Programmierung) Gebrauch: Die Operanden werden in der Definition nicht explizit genannt. Stattdessen wird die Funktion als Fork (dt. Gabel) definiert. Die Fork +/ % #
ist dabei gleichbedeutend mit einer Funktion (+/ operand) % (# operand)
, d. h. zuerst werden die linke und die rechte Funktion auf das Argument und danach die mittlere dyadische (binäre) Funktion %
auf die dabei erhaltenen Ergebnisse angewandt. Die linke Funktion +/
summiert alle Elemente des Arrays (im beispielhaften Aufruf in Zeile 2: 1 + 2 + 3 + 4 = 10), die rechte Funktion #
liefert die Anzahl der Elemente im Array (in diesem Fall 4 Elemente) und %
teilt den linken Operand durch den rechten (10 ÷ 4 = 2.5).
Nach der Funktionsdefinition wird avg mit einem Array 1 2 3 4
als Operand aufgerufen.