WikiDer > APL (Programmiersprache)
APL | ||||
| Paradigma | funktional, Multiparadigma | |||
| erschien | 1962-1964 | |||
| Entworfen von | Kenneth Eugene Iverson | |||
| Entwickelt von | Kenneth Eugene Iverson | |||
| Typensystem | dynamisch | |||
| Implementierungen | IBM APL2, Dyalog APL, APL2000, Sharp APL | |||
| Dialekte | ein und andere | |||
| Beeinflusst von | mathematische Schreibweise | |||
| Einfluss auf | J, k | |||
| ||||
APL ist ein Programmiersprache. Die Sprache stammt aus einem Buch geschrieben in 1962 wurde geschrieben von Kenneth E. Iverson und in die eine mathematische Notation eingeführt wurde. Mit einigen Anpassungen wurde die Programmiersprache aus diesem Vorschlag entwickelt. Der Name APL leitet sich vom Titel des Buches ab: einpProgrammierung lSprache.
Kurze Geschichte
Entwicklungen im Laufe der Zeit
Wie bereits erwähnt, entstand die Sprache durch die Veröffentlichung von Kenneth E. Iverson. Obwohl sein Buch in 1962 herauskam, entdeckte und entwickelte er die Sprache bereits in 1957.Als Programmiersprache wurde APL schnell populär, insbesondere in der Wissenschafts- und Finanzwelt, wegen seiner leistungsstarken Fähigkeiten, mit mehrdimensionalen Datenarrays umzugehen.Ursprünglich lief APL auf (IBM)-Großrechner und im Laufe der Jahre entstanden mehrere Dialekte der Sprache pc Anfang der 1980er Jahre und der Rückgang der Popularität von Großrechner für den PC kam eine Version von APL unter dem Namen heraus APL*Plus/PC vom Entwickler STSC (siehe evtl.: STSC (Englisch)). Die erste Version für den PC ist da 1982 auf den Markt und Mitte der 1980er Jahre eine 32-Bit-Version für die Unix Systeme auf dem Markt als APL*Plus/Unix).Bis um 1995 STSC entwickelte APL*Plus weiter, verkaufte aber in diesem Jahr die Rechte LEX2000 Inc. was kommt als nächstes in 1999 kam zurück in die Hände von KennenlernenDas Interesse an und die Nutzung von APL ist in den letzten Jahren stark zurückgegangen, teilweise aufgrund des Aufkommens neuer Entwicklungsumgebungen wie z C (und seine Nachfolger C/ C ) und später Java). Es gibt noch eine Gruppe eingefleischte diese APL und Varianten/Dialekte wie A [1] nutzen und entwickeln.
Vom Mainframe zum PC
Der Übergang zum Neuen pcUmgebung erforderte natürlich einige Ergänzungen, um – insbesondere – die Ausgabe von Daten und anderen spezifischen Macken des pc. Die ersten Versionen liefen (offensichtlich) unter MS-DOS und das waren speziell Einzelbenutzer- und Einzelaufgabenumgebungen. Dies erfordert eine ganz andere Herangehensweise an die Speichernutzung und Befehle, die sich auf Ihre Berechtigungen beziehen, wie viel Ihr Programm verwenden darf Zentralprozessor sind von geringem Nutzen. Um die Portierung vorhandener Programme von Mainframe-Umgebungen um den PC zu vereinfachen, behielt die PC-Version Befehle und Funktionen bei, die im Grunde nichts bewirkten, aber die Kompatibilität von Arbeitsbereiche erhöht. (Nach dem Wechsel von MS-DOS zu Fenster Sie sind zu einer Mehrbenutzer- und Multitasking-Umgebung zurückgekehrt; aber anders als mit Mainframe-Systeme.)
Momentane Situation
Obwohl die Nutzung stark zurückgegangen ist, gibt es eine begeisterte Anwendergruppe, die über das Internet neue Entwicklungen auf Basis von APL entwickelt.
- Von 2001 macht das Projekt Aplus von A, das frei verfügbar ist unter der GNU General Public License. Es ist in 1998 entwickelt von Arthur Whitney[2] bei der bank arbeiten Morgan Stanley. Im Laufe der Jahre hatte dieses Unternehmen – wie viele vergleichbare Unternehmen – viel Software in APL entwickelt. Weil sich die Banken von ihren Mainframes verabschiedeten und begannen, Systeme unter SunOS/Solaris man suchte dafür eine geeignete APL-Umgebung, die aber nicht verfügbar war. Da das Unternehmen lieber nicht auf die vorhandenen Tools in APL verzichten oder von Grund auf in einer anderen Sprache schreiben möchte, haben sie die Entwicklung von A von Arthur Whitney unterstützt und die Bank unterstützt das Projekt immer noch.[3]
- VisualAPL und APLNext: neue Versionen von APL besonders geeignet für .GERADE Umgebungen.[4]
- DialogAPL, eine moderne Version von APL für verschiedene Windows- und Linux/Unix-Plattformen.[5]
- IBM APL2: ein Interpreter für IBM-Systeme.[6]
- MVT4APL: Verwendet einen Emulator, um APL360 auf dem PC auszuführen. Dies erfordert den Quellcode von APL360, der heruntergeladen werden kann, wenn Sie den Bedingungen zustimmen.[7]
Unterschiede
Die Programmiersprache unterscheidet sich in vielerlei Hinsicht von anderen Sprachen.
- Alle eingebauten Funktionen werden durch ein Zeichen dargestellt. Die üblichen Zeichen und − vor dem summieren und subtrahieren sind normalerweise vorhanden, aber auch für andere Funktionen, wie z Fakultät, Logarithmus und Sinus, Zeichen verwendet. Ein APL-Programm kann daher nicht ASCII verschlüsselt werden, aber in UNICODE (ab 2336 Uhr).
- Es gibt keine Keywords wie wenn und zum. Alle bedingten Anweisungen werden mit dem Sprungbefehl ausgedrückt (dargestellt durch das Zeichen → ) gefolgt von einem Ausdruck, der zu einer Zeilennummer ausgewertet wird.
- Buchstaben werden nur verwendet, um Kennungen zu machen. Die einzige Ausnahme ist der Brief E, die auch in einer Zahl mit verwendet wird Gleitkomma. Außerdem werden Buchstaben für Systembefehle wie LOAD und SAVE verwendet, sind aber nicht Bestandteil der Sprache.
- Es gibt ein separates Minuszeichen ¯ für negative Zahlen, während für Subtraktion und Negation das gemeinsame Minuszeichen − wird eingesetzt. Vielleicht ist APL die einzige Programmiersprache, in der eine negative Zahl nicht als Ausdruck eingegeben wird. Es gibt einen Unterschied zwischen ¯5 8 = (¯5) 8 = 3 und −5 8 = −(5 8) = ¯13. Schreiben die Leute? 12 18 ¯5 dann ist das ein Vektor von drei Zahlen, und 12 18 −5 ist ein Ausdruck, der zu berechnet 7 13.
- Ausdrücke verwenden nicht das Übliche Bestellung bearbeiten von Betreibern. Ein Ausdruck wird streng von rechts nach links ausgeführt (es sei denn, es werden Klammern verwendet). Multiplikation hat daher keinen Vorrang vor Addition und Subtraktion. Der Ausdruck 2×6 3 gilt in APL als 2×(6 3) = 18, nicht wie (2×6) 3 = 15 wie es in anderen Programmiersprachen und der Mathematik der Fall ist. Ein Vektor zählt als Einheit, also 12 18 − 5 = (12 18) −5 = 7 13.
- Es gibt keine expliziten Erklärungen. Durch Zuweisen eines gesamten Arrays zu einem Bezeichner wird Speicherplatz für diesen Bezeichner reserviert, genug Platz für das gesamte Array.
- Ganze Arrays werden auf einmal verarbeitet. Es gibt Funktionen, die ein ganzes Array erstellen oder kopieren oder eine Operation für ein Array als Ganzes ausführen können.
- Die Sprache ist nicht strukturiert. Dies wird nun als Nachteil angesehen. Die Prinzipien der strukturierte Programmierung waren zu der Zeit, als die Sprache entwickelt wurde, nicht üblich. Da die Sprache jedoch ganze Arrays auf einmal verarbeitet, ist es selten erforderlich, eine Iteration zu verwenden.
Ein großer Vorteil von APL ist, dass es sehr kompakt und schnell codiert werden kann. Das ist gleichzeitig ein Nachteil. Eine APL-Quelle ist wegen der vielen seltsamen Zeichen oft schwer zu lesen.
Eingang
Um APL-Symbole einzugeben, ist ein spezielles Tastatur erforderlich. Die abgebildete Tastatur hat keine getrennten Groß- und Kleinbuchstaben: Die Buchstabentasten in Kombination mit Shift ergeben ein Symbol.
Und die Tastatur hat immer noch zu wenige Tasten. Daher können auch Kombinationen (Overstrikes) vorgenommen werden. Wenn Sie beispielsweise möchten, dass ein Ausrufezeichen die Fakultätsfunktion ausführt, geben Sie ein Anführungszeichen (Umschalt-K), eine Rücktaste und einen Punkt ein. Ebenso können die Buchstaben (keine anderen Zeichen) unterstrichen werden.
Es gibt auch verschiedene APL-Editoren. Um die Eingabe zu erleichtern, können Sie bei vielen Symbolen den Namen eingeben.
Daten
Wie bei jeder Programmiersprache können Daten aus Arrays bestehen. Aber in APL wird ein Array als Einheit betrachtet. Ein Array kann eine beliebige Anzahl von Dimensionen haben. Ein Array mit zwei Dimensionen wird 'Matrix' genannt, ein Array mit einer Dimension wird 'Vektor' genannt. Es existiert auch ein Array von Nulldimensionen, das ein Skalar ist.
Die Dimension eines Arrays kann bei Bedarf eine Länge von null oder eins haben. Das scheint nicht sehr sinnvoll zu sein, aber ein Array mit einer solchen Dimension kann durch ein Programm erweitert werden.
Ein Vektor (2 oder länger) kann als Konstante als Zahlenfolge mit Leerzeichen eingegeben werden, zum Beispiel 1 4 9 16 25. Wird eine einzelne Zahl eingegeben, handelt es sich um einen Skalar. Wenn Sie ein anderes Array wünschen, müssen Sie eine Funktion verwenden.
Die bekannteste Funktion zum Erstellen eines Arrays ist umformen⍴. Zum Beispiel der Ausdruck 2 4⍴9 8 1 12 16 25 14 14 erstellt eine 2 mal 4 Matrix, mit den Zahlen dahinter als Werte.
Eine weitere häufig verwendete Funktion ist die Indexgenerator⍳ was einen Vektor aus natürlichen Zahlen ergibt. ⍳5 ergibt somit den Vektor 1 2 3 4 5. Es sieht nicht sehr nützlich aus, aber diese Funktion ist oft sehr nützlich.
Die meisten Funktionen sind sehr nachsichtig, wenn ein Argument in der falschen Form vorliegt. Zum Beispiel die oben erwähnte Funktion ⍴ braucht im Grunde einen Vektor als linkes Argument, aber ein Skalar ist auch gut.
Ein Array kann wie in jeder Programmiersprache angegeben werden: ein[ich]. Bei zwei oder mehr Indizes werden diese durch they getrennt ;. Es ist keineswegs notwendig, dass auf diese Weise ein einzelner Wert aus einem Array extrahiert wird: Durch die Verwendung eines Arrays als Index oder das Weglassen eines Index kann ein Teil eines Arrays ausgewählt werden: der Ausdruck R[;3 4] gibt eine Matrix zurück, die aus der dritten und vierten Spalte der Matrix besteht R — die ganzen Spalten, weil der erste Index, zwischen [ und ; wurde weggelassen.
Es ist sogar möglich, einen konstanten Vektor anzugeben, zum Beispiel 1 3 8 5[ich].
Beispiel
Die Zeile darunter ist ein Programm, das alle enthält Primzahlen von 1 bis R findet:
(∼RεR∘.×R)/R←1↓⍳R
und die Beschreibung von rechts nach links:
- ⍳R erzeugt einen ganzzahligen Vektor von 1 bis zu R, So 1 2 3 4 5 wenn R=5
- 1↓ 'drop' lässt die erste Zahl aus: 2 3 4 5
- ←Aufgabenverwalter: So R ist jetzt 2 3 4 5
- ∘.×aus produkt von R und R: Dies ergibt das Array:
4 6 8 10
6 9 12 15
8 12 16 20
10 15 20 25 - ε untersucht jede Zahl im linken Parameter 2 3 4 5 ob es im richtigen Parameter (der Matrix) vorkommt. Nur der 4 auftritt, so ist das Ergebnis: falsch falsch wahr falsch (in Wirklichkeit 0 0 1 0)
- ∼, Verneinung: so 1 1 0 1
- /: auswählen: nach Vektor 1 1 0 1 Zahlen werden aus dem Vektor ausgewählt R, So 2 3 4 5. Das Ergebnis ist der Vektor 2 3 5. Dies löst das Problem.
Funktionen
Es gibt monadische Funktionen mit einem Argument und dyadische Funktionen mit zwei Argumenten. Die Syntax ist wie bei klassischen mathematischen Funktionen üblich, zum Beispiel einB und −B. Diese Syntax wurde für alle Funktionen einheitlich implementiert, einschließlich faktoriell (Ausrufezeichen links vom Operanden, nicht rechts) und Absolutwert (senkrechter Balken links vom Operanden, nicht auf beiden Seiten).
Weiterhin werden die Funktionen in Skalarfunktionen und Mischfunktionen unterschieden. Letztere sind speziell für die Arbeit mit Arrays gedacht.
Skalare Funktionen
Wenn Skalarfunktionen auf ein Array angewendet werden, wirken sie auf jedes Element des Arrays separat. Zum Beispiel kann man zwei Arrays zusammenzählen, vorausgesetzt, beide Arrays haben die gleiche Form, also Arrays mit gleichen Abmessungen mit gleichen Werten. Das Ergebnis hat wieder dieselbe Form. Beispielsweise: 3 5 4 2 4 6 gibt 5 9 10. Es gibt eine Ausnahme: Man kann eine skalare dyadische Funktion auf zwei Arrays ausführen, von denen eine einzelne Zahl ist. Beispielsweise: 3 2 4 6 gibt 5 7 9.
| Schild | Mathematik | Unicode (hex) | Dyadisch | Monadisch | ||||
|---|---|---|---|---|---|---|---|---|
| Plus | Zusatz | Plus | unverändert | |||||
| − | Mindest | Subtraktion | Mindest | Negation | ||||
| × | imes | Mahlzeit | Multiplikation | Schild | 1 wenn das Argument positiv ist, ¯1 wenn das Argument negativ ist, 0 wenn Argument null ist | |||
| ÷ | div | Teilen | Einteilung | Umkehren | Umkehren | |||
| ⌈ | 2308 | Maximal | Das größere der beiden Argumente | Decke | Die kleinste ganze Zahl nicht kleiner als das Argument het | |||
| ⌊ | 230a | Minimum | Das kleinere der beiden Argumente | Fußboden | Die größte ganze Zahl nicht größer als das Argument | |||
| * | 2217 | Potenzierung | A in der Kraft von B | e-power | Macht von e | |||
| ⍟ | kreisend | Logarithmus | Logarithmus von B mit Basis A | Natürlicher Logarithmus | ||||
| | | Sich ausruhen | Rest beim Teilen von B durch A | Absolutwert | |||||
| ! | Binomialkoeffizient | Fakultät | Fakultät (oder Gammafunktion von B 1) | |||||
| ? | siehe gemischte Funktionen | Zufällig | Zufallszahl aus ⍳B | |||||
| ο | Kreis | 2394 | trigonometrische Funktionen | das linke Argument (zwischen ¯7 und 7) bestimmt, welche Funktion ausgeführt wird | pi mal | Produkt von pi | ||
| Logische Funktionen: nur erlaubte Argumente sind 1 (wahr) und 0 (falsch) | ||||||||
| ∧ | Land | 22c0 | Und | |||||
| ∨ | lor | 22c1 | Oder | |||||
| ⍲ | 2372 | Nicht und | ||||||
| ⍱ | 2371 | nicht oder | ||||||
| ∼ | sim | Nicht | Änderungen 1 im 0 und 0 im 1 | |||||
| Gleichungen: das Ergebnis ist 1 (wahr oder 0 (falsch) | ||||||||
| < | kleiner | Kann nur auf Zahlen angewendet werden | ||||||
| ≤ | le | 2264 | kleiner oder gleich | |||||
| > | größer | |||||||
| ≥ | ge | 2265 | größer oder gleich | |||||
| = | gleich | Kann auf Zahlen und Zeichen angewendet werden | ||||||
| ≠ | e | 2260 | ungleich | |||||
Gemischte Funktionen
Gemischte Funktionen sind speziell zum Bearbeiten von Arrays gedacht. Einige Funktionen können sogar indiziert werden. Beispielsweise ein↑[ich]B. In diesem Fall ist die Funktion ein↑B entlang des Index ich hingerichtet. Der Index ist also eine ganze Zahl, mit Ausnahme der Funktion Lamination. Wird kein Index angegeben, wird die Funktion entlang der letzten Dimension ausgeführt.
| Schild | Mathematik | Unicode (hex) | Dyadisch | Monadisch | ||||
|---|---|---|---|---|---|---|---|---|
| ⍴ | 2374 | Umformen | Erstellen Sie ein Array. das linke Argument bestimmt die Form des Arrays, die Werte des Arrays stammen aus dem rechten Argument. | Abmessungen | Erstellt einen Vektor mit der Form des richtigen Arguments. | |||
| ⍳ | 2373 | Suche | Findet die Werte des rechten Arguments im linken Argument und gibt die Position zurück, an der die Werte vorkommen. Das linke Argument muss ein Vektor sein. | Index | Erzeugt einen Vektor mit den natürlichen Zahlen von 1 bis nein. | |||
| , | Verkettung (anzeigbar) | Ein Komma verbindet zwei Arrays zu einem neuen Array. Alle Dimensionen der beiden Arrays müssen identisch sein, mit Ausnahme der Dimension, entlang der die Funktion ausgeführt wird. | Ravel | Ein monadisches Komma bildet einen Vektor des Arguments. | ||||
| , | Laminierung (Index ist erforderlich und muss eine Bruchzahl sein, Ausnahme: wenn beide Argumente skalar sind, wird kein Index benötigt) | Verbindet zwei Arrays zu einem neuen Array. Alle Dimensionen der beiden Arrays müssen identisch sein, und das neue Array hat eine weitere Dimension mit dem Wert 2. Diese Funktion erfordert einen unterbrochenen Index. Beispielsweise ein,[3.5]B verbindet die Arrays zwischen der dritten und vierten Dimension. | ||||||
| ↑ | Aufwärtspfeil | 2191 | Nehmen (anzeigbar) | Nimmt einen Teil des zweiten Arguments, das sind so viele Elemente, wie durch das zweite Argument angegeben. Ist das erste Argument positiv, werden die ersten N Elemente genommen, ist es negativ, werden die letzten −N Elemente genommen. | ||||
| ↓ | Pfeil nach unten | 2193 | Süßholz (anzeigbar) | Entfernt einen Teil des zweiten Arguments, nämlich so viele Elemente, wie durch das zweite Argument angegeben. Ist das erste Argument positiv, werden die ersten N Elemente entfernt, ist es negativ, werden die letzten −N Elemente entfernt. | ||||
| / | Kompression (anzeigbar) | Das linke Argument ist ein logischer Vektor. Die einer Null entsprechenden Werte werden aus dem rechten Argument entfernt. Zum Beispiel 1 0 1 0 / 2 3 5 4 ergibt 2 5. | Das Schild / kann nicht monadisch verwendet werden, sondern bildet dann mit dem Vorzeichen eine kombinierte Funktion. Siehe nächste Tabelle. | |||||
| ⌿ | 233f | Kompression | Das Gleiche wie /[1] | |||||
| Ausdehnung (anzeigbar) | Das linke Argument ist ein logischer Vektor. Im rechten Argument werden Werte an den Stellen eingefügt, die einer Null im linken Argument entsprechen. 1 0 1 0 2 5 ergibt beispielsweise 2 0 5 0. | |||||||
| ⍀ | 2340 | Erweiterung | Das Gleiche wie [1]. | |||||
| ⍋ | 23c3 | aufwerten | Vektor, so dass V[⍋V] sortiert. | |||||
| ⍒ | Abstufung nach unten | Vektor, so dass V[⍒V] wird umgekehrt sortiert. | ||||||
| ⌽ | 23c0, 233d | Drehen (anzeigbar) | Die Reihenfolge der Elemente des rechten Arguments ist verschoben | Umkehren | Das Argument der rechten Hand ist umgekehrt | |||
| ⊖ | drehen | Das Gleiche wie ⌽[1] | Umkehren | |||||
| ⌹ | 2339 | Matrixteilung | Umkehrung des Produkts der inneren Matrix | Inverse von Matrix | ||||
| ? | Deal | Eine zufällig ausgewählte Zahl aus ⍳B | siehe Skalarfunktionen | |||||
| ⌶ | 2336 | ich glänze | Diverse Funktionen, nur für den Systemadministrator, teilweise mit Nebenwirkungen. Unter anderem "peek" und "poke" in den Speicher, System herunterfahren. | ich glänze | Diverse Systeminformationen wie Datum, Uhrzeit, Speicherplatz, Anzahl der angemeldeten Benutzer. Es gibt noch mehr Möglichkeiten für den Systemadministrator. | |||
Kombinierte Funktionen
Darüber hinaus gibt es kombinierte Funktionen. Hier wird eine neue gemischte Funktion aus einer skalaren dyadischen Funktion (oder zwei skalaren dyadischen Funktionen) gebildet. In den Beispielen unten, ⎕ durch eine beliebige skalare dyadische Funktion ersetzt werden.
| Schild | Mathematik | Unicode (hex) | Dyadisch | Monadisch | ||||
|---|---|---|---|---|---|---|---|---|
| ⎕/B | Die Ermäßigung | Die dyadische Funktion ⎕ wird auf den gesamten Vektor angewendet, zum Beispiel /3 5 8 entspricht 3 5 8 | ||||||
| ⎕⌿B | 233f | Das Gleiche wie ⎕/[1]B | ||||||
| ein∘.⎕B | 2218 | Externes Produkt | Kreuzprodukt zweier Arrays. Jede dyadische Skalarfunktion kann als ⎕ werden verwendet. | |||||
| ein⎕.⎕B | Internes Produkt | Das gewöhnliche Matrixprodukt ist ein .×B | ||||||
Unsachgemäße Funktionen
| Schild | Mathematik | Unicode (hex) | Dyadisch | Monadisch | ||||
|---|---|---|---|---|---|---|---|---|
| ← | bekommt | 2190 | vergeben | Das linke Argument ist eine Variable, die den Wert des rechten Arguments annimmt | ||||
| → | Ö | 2192 | Sprungbefehl | Die Ausführung des Programms wird auf der angegebenen Zeilennummer fortgesetzt. Wenn das Argument ein Array ist, gilt das erste Element des Arrays. Wenn das Argument ein leeres Array ist, wird die Ausführung mit der nächsten Zeile fortgesetzt. Bedingte Sprünge sind durch die Verwendung von Ausdrücken möglich. Ein Sprung zur Zeile Null beendet die Routinenausführung. | ||||
Import und Export
Die letzte Operation, die auf einer Linie ausgeführt wird, ist fast immer → (Sprungbefehl) oder ← (Zuschreibung).
Beispielsweise:
→3 5 zu Zeile 8 springen
ein←3 5ein bekommt den Wert 8
Gibt es noch etwas zum Beispiel 3 5, dann wird die Addition berechnet, sagt aber nicht, was mit dem Ergebnis zu tun ist. In diesem Fall wird das Ergebnis gedruckt.
Es ist auch möglich, Zwischenergebnisse eines Ausdrucks mit der Kombination ⎕←. Beispielsweise: ein←3 ⎕←5 Der Wert 5 wird gedruckt und ein bekommt den Wert 8.
Wenn Sie während des Programms zur Eingabe auffordern möchten, verwenden Sie das Zeichen ⎕, aber nicht links von einem Pfeil. Beispielsweise 2.20371×⎕: Fordert zur Eingabe auf und multipliziert das Ergebnis mit 2,20371.
Benutzerdefinierte Funktionen
Es ist natürlich möglich, selbst eine Funktion zu definieren. Eine selbstdefinierte Funktion kann dyadisch, monadisch und auch niladisch sein, dh sie hat 2, 1 oder 0 Argumente.
Eine selbstdefinierte Funktion wird nicht mit einem Vorzeichen, sondern mit einem Namen, also einem Bezeichner, gekennzeichnet. Die Syntax ist jedoch nicht anders: Eine dyadische Funktion wird mit dem Namen und beiden Argumenten auf beiden Seiten aufgerufen und eine monadische Funktion mit dem Namen und dem Argument dahinter. Diese Art des Aufrufens unterscheidet sich stark von anderen Programmiersprachen.
Als Beispiel geben wir die folgende Funktion an. Das Schild ∇ bezeichnet den Header der Funktion. Darunter befindet sich der Rumpf, in diesem Fall nur eine Zeile, mit der Zeilennummer in Klammern davor.
∇SUMME←SIEVRELV
[1] SUMME←(SIEV)÷1 (SIE×V)÷9E16
Die Variable, die als Rückgabewert dient, wird links neben dem Pfeil in der Kopfzeile angezeigt. Rechts davon stehen drei Namen, es handelt sich also um eine dyadische Funktion. Der mittlere ist der Name der Funktion und die anderen beiden sind die Argumente.
Speicherung von Daten und Programmen
APL handhabt die Speicherung sowohl der Daten als auch des Programmquellcodes selbst im Vergleich zu vielen anderen Sprachen auf eine besondere Art. Man unterscheidet drei Dateitypen:
- Workspace-Dateien: Hier speichern Sie den Programmcode. APL ist standardmäßig eine Interpretersprache, sodass die Befehle erst zur Ausführungszeit in Maschinencode umgewandelt werden. In den PC-Versionen von APL haben diese Dateien die Erweiterung .AWS.
- APL-Datendateien: Wenn Sie Daten wie Variablen auf Platte speichern (oder von Festplatte lesen) möchten, verwenden Sie normalerweise die APL-eigene Dateistruktur, erkennbar an der Erweiterung .ASF. Wenn Sie Daten aus einer solchen Datei anfordern möchten, dann ordnen Sie (in APL "KRAWATTE" genannt) Sie eine solche Datei und verknüpfen Sie sie mit einem Song. Die Daten selbst werden dann indiziert gespeichert. Wenn Sie Daten hinzufügen, wird eine neue Indexnummer oder ein neues Segment hinzugefügt. Später können Sie sich mit der TIE-Nummer und der Indexnummer auf diese Daten beziehen. Sie können diese Daten dann lesen, neu schreiben/ersetzen oder löschen.
- Jedes Segment kann eine Variable enthalten, aber es kann alles sein. Zum Beispiel eine alphanumerische Zeichenfolge oder eine dreidimensionale Matrix mit nur ganzen Zahlen usw. In einer Datei können Sie beliebige Datentypen pro Segment speichern.
- Native Dateien: Dies sind alle anderen Dateien, aber normalerweise ASCII- oder Textdateien. Die Erweiterung ist irrelevant – es wird nichts dagegen unternommen. Wie ASF-Dateien erhalten sie KRAWATTE-und und eine (negative) Zahl. Sie lesen Daten mit einem Lesebefehl, bei dem Sie als Argument die TIE-Nummer angeben, gefolgt von der Art der Daten, dem Startpunkt und der zu lesenden Datenmenge. Über die Art des Arguments geben Sie an, ob Sie die Daten als alphanumerische Zeichen, ganze Zahlen, reelle Zahlen usw. interpretieren sollen. In der Praxis wird der erste Typ verwendet und Sie arbeiten mit Klartext. Der Startpunkt und die Länge werden in Bytes ausgedrückt. So können Sie beispielsweise 100 Zeichen ab dem 80. Zeichen explizit aus einer Textdatei lesen. Das Schreiben in native Dateien kann entweder durch Hinzufügen von Daten am Ende der bestehenden Datei oder durch explizite Angabe - genau wie beim Lesen - erfolgen, von welchem Zeichen/Byte die Daten neu geschrieben werden sollen.
- Wenn Sie Daten auf Festplatte in einem APL-Programm speichern möchten, das nur von (anderen) APL-Programmen verwendet wird, wählen Sie Ihre eigenen ASF-Dateien, möchten Sie jedoch Daten mit anderen Programmen austauschen, verwenden Sie die nativen Dateien: zum Beispiel können Sie Ergebnisse von APL-Prozeduren in eine native Datei in Form von a . schreiben kommagetrennte Datei damit Sie diese Daten später wieder in a . einlesen können ExcelKalkulationstabelle.
Siehe auch
Externe Links
- (und) Warum APL?
Quellen, Anmerkungen und/oder Verweise
|
| Siehe die Kategorie APL von Wikimedia Commons für Mediendateien zu diesem Thema. |
| Programmiersprachen |
|---|
ABAP ·ABC ·ActionScript ·ada ·algol ·APL ·Assemblersprachen ·AWK ·B ·BASIC ·BCPL ·C ·C ·C♯ ·sauber ·Schermaschine ·COBOL ·COMAL ·Curry ·d ·Eiffel ·Erlang ·F♯ ·her ·fortran ·gehen ·Haskell ·Symbol ·J ·Java ·Kotlin ·lispeln ·Logo ·lua ·m4 ·ML ·Modula-2 ·Oberon ·Objekt Pascal ·Ziel c ·Ocamli ·Unze ·Pascal ·perl ·PHP ·PL/I ·PL/SQL ·Prolog ·Prova ·Python ·Rexx ·Rollenspiel ·Rubin ·Frieden ·SAS ·Reichweite ·planen ·Selbst ·Simula ·Smalltalk ·Schnell ·TCL ·Typoskript ·vala ·Visual Basic |