Author
verena-laun
View
110
Download
2
Embed Size (px)
APL
A programming language
Maria Heym
Proseminar "Vergleich von Programmiersprachen"
2
APL
A double-decker bus. Its takes rows and columns of passengers to the same place all at the same time. But, it drives only in reverse gear, and is instrumented in Greek.
[5]
APL
Sie schießen sich in den Fuß und verbringen den ganzen Tag damit raus zukriegen, wie sie das mit weniger Buchstaben schaffen können.
[6]
Proseminar "Vergleich von Programmiersprachen"
3
Besonderheiten
•Zeichensatz
•Mächtigkeit
•Abarbeitungsreihenfolge
Proseminar "Vergleich von Programmiersprachen"
4
Gliederung1. Entstehungsgeschichte2. Anwendungsbereiche3. Typkonzepte4. Funktionsaufbau5. Zuweisung eines Wertes auf eine Variable6. Prozedurkonzepte7. Globale Programmstrukturen8. Ereignissteuerung9. Beispiel MergeSort10. Quellen
Proseminar "Vergleich von Programmiersprachen"
5
Entstehungsgeschichte (I)
• Als mathematische Notationsform von Kenneth E. Iverson 1962 in „A programming language“ vorgestellt
• Zunächst zur formalen Beschreibung von IBM Systems/360
• 1966: erster Interpreter von APL
Proseminar "Vergleich von Programmiersprachen"
6
Entstehungsgeschichte (II)
• Bis 1985: IBM führender Anbieter des Interpreters
• Seit 1992: Weiterentwicklung durch kleinere Softwarefirmen
• Aufnahme in die .Net-Familie
Proseminar "Vergleich von Programmiersprachen"
7
Anwendungsgebiete
• Statistiken zur Datenanalyse
Banken, Versicherungen
• „wenn´s mal schnell gehen soll“
• Von Mathematikern, Ingenieuren & „Nicht-Programmierern“ verwendet
Proseminar "Vergleich von Programmiersprachen"
8
Typkonzepte (I)
• Nur 2 Datentypen explizit unterscheidbar
– Zeichenketten– Zahlen
• Interne Unterscheidung zwischen Festpunkt-, Gleitpunktzahlen und Boolean
Proseminar "Vergleich von Programmiersprachen"
9
Typkonzepte (II)
• Aus Skalaren: (homogene) dynamische Feldern
Vektoren
Matrizen
Höherdimensionale Felder
Proseminar "Vergleich von Programmiersprachen"
10
Funktionsaufbau
• Funktionskopf:
<Fkt.dekl.> <lokale Parameter>
• Funktionsende durch
Proseminar "Vergleich von Programmiersprachen"
11
Beispiel „Hello World“
hello_world
[1] ← `hello world`
[2]
Proseminar "Vergleich von Programmiersprachen"
12
Zuweisung eines Wertes auf eine Variable (I)
Skalare
skalarZuweisung
[1] x← 100
[2] y←`5`
[3]
skalarZuweisung
x
100
y
5
Proseminar "Vergleich von Programmiersprachen"
13
Zuweisung eines Wertes auf eine Variable (II)
• Vektoren
vektorZuweisung
[1] a←ι5
[2] b←1 2 3 4 5
[3] c←`123`
[4] d←,100
[5] e←,`b`
[6] f←,A
[7]
Proseminar "Vergleich von Programmiersprachen"
14
Zuweisung eines Wertes auf eine Variable (III)
Matrizen
• folgen allgemein der Struktur A←<Strukturvektor>ρ<Datenvektor>
matrizenZuweisung[1]V←1 0 2 1 0 3 1 1 5 2 1 5[2]A←2 2 3ρ V[3]
Proseminar "Vergleich von Programmiersprachen"
15
Zuweisung eines Wertes auf eine Variable (IV)
matrizenZuweisung[1]V←1 0 2 1 0 3 1 1 5 2 1 5[2]A←2 2 3ρ V
matrizenZuweisungV1 0 21 0 3
1 1 52 1 5
Proseminar "Vergleich von Programmiersprachen"
16
Zuweisung eine Wertes auf eine Variable (V)
matrizenZuweisung2[1]B←3 4ρ1 2 3
matrizenZuweisung2B1 2 3 12 3 1 23 1 2 3
Proseminar "Vergleich von Programmiersprachen"
17
Prozedurkonzepte• Keine Deklarationsteile
• Nur externe Prozeduren
– Prozeduren vom Funktionstyp
– Prozeduren vom Anweisungstyp
• Grundsätzlich call-by-value
Proseminar "Vergleich von Programmiersprachen"
18
Funktionstyp
• Dyadisch:x funktion y
• Monadisch:funktion z
• Niladisch:funktion
Proseminar "Vergleich von Programmiersprachen"
19
Anweisungstyp
• Dyadisch:
r ← x funktion y
• Monadisch:
r ← funktion y
• Niladisch:
r ← funktion
Proseminar "Vergleich von Programmiersprachen"
20
Beispiele
Anfwerte[1]D←B+C←B+B←A←1[2] Aufrund X[1]X+1|-X[2] L ReEck H[1]2xL+H[2]
Proseminar "Vergleich von Programmiersprachen"
21
Beispiele (II)
R←Summe[1]R←(?6)+?6[2] U←Kreisumf R[1]U←2x°R[2] R←A Hyp B[1]R←((A*2)+B*2)*.5[2]
Proseminar "Vergleich von Programmiersprachen"
22
Elementare Operatoren (I)
Symbol Monadisch Dyadisch
+ Identität
+5
Summe
7+5
- Negation
-5
Differenz
7-5
! Fakultät
3!
Binomialkoeffizient
3!2
Proseminar "Vergleich von Programmiersprachen"
23
Elementare Operatoren (II)
ι Vektor
ι5
Kl. Index von X in Y
1 2 6 4 ι 7
ρ Gibt SV zurück
ρA
Erstellt Matrix
SV ρ DV
| Betrag
|-5
X modulo y
12|5
° Multiplikation mit π
°X
Kreisfunktion
N°X
Proseminar "Vergleich von Programmiersprachen"
24
Elementare Operatoren (III)
N N°X (-N)°X
0 √(1-X²) √(1-X²)
1 sin X arc sin X
2 cos X arc cos X
3 tan X arc tan X
4 √(X²-1) √(X²+1)
5 sinh X arc sinh X
6 cosh X arc cosh X
7 tanh X arc tanh X
Proseminar "Vergleich von Programmiersprachen"
25
Globale Programmstrukturen (I)
• Blöcke existieren nicht • Alternativ: Funktionen, goto´s
• Namensbereiche:
1. Variablen der Umgebung in aufgerufenen Funktionen bekannt
2. Lokale Variable setzt globale Variable außer Kraft
Proseminar "Vergleich von Programmiersprachen"
26
Globale Programmstrukturen (II)
aufrufend[1]S←1[2]aufgerufen[3]
aufgerufen[1]S←1[2]S←S+1[3]
Proseminar "Vergleich von Programmiersprachen"
27
Globale Programmstrukturen (III)
aufrufend
S
2
Proseminar "Vergleich von Programmiersprachen"
28
Globale Programmstrukturen (IV)
aufrufend[1]S←1[2]aufgerufen[3]
aufgerufen;S[1]S←1[2]S←S+1[3]
Proseminar "Vergleich von Programmiersprachen"
29
Globale Programmstrukturen (V)
aufrufend
S
1
Proseminar "Vergleich von Programmiersprachen"
30
Ereignissteuerung
• Keine explizite Ereignissteuerung
• Sprünge möglich
– Sprünge zu Marken– Sprünge auf Zeilennummern
Proseminar "Vergleich von Programmiersprachen"
31
Beispiel Sprünge
sprung
[1] →ι0
[2] →3 4 5
[3] → next
[4]next: → 0
[5] →7
[6]
Proseminar "Vergleich von Programmiersprachen"
32
Beispiel MergeSort (I)• while- Schleife; Aufruf
→ LOOP
→ WHILE c DOTO end
…
end: → POOL
Proseminar "Vergleich von Programmiersprachen"
33
Beispiel MergeSort (II)• While-Schleife; Realisierung
l←LOOP[1] LOOPSTACK←(1+(ı27)[1+ι1]), LOOPSTACK,l←ι0[2]
clabel←c DOTO label[1]clabel←c, label[2]
Proseminar "Vergleich von Programmiersprachen"
34
Beispiel MergeSort (III)
dest←WHILE clabel[1]→clabel[ι1]/0,dest←(~clabel[ι1])/ clabel[1+ι1]+1[2]LOOPSTACK←1↓LOOPSTACK[3]
back←POOL[1]back←1↑LOOPSTACK[2]
Proseminar "Vergleich von Programmiersprachen"
35
Beispiel MergeSort (IV)
• If-Verzweigung; Aufruf
IF c DOTO label1
…
label1: →label2 DOTO ELSE
…
label2: → FI
Proseminar "Vergleich von Programmiersprachen"
36
Beispiel MergeSort (V)
label←IF clabel
[1]label←(~clabel[ι1])/1+clabel[1+ι1]
[2]
ELSE←0
FI←ι0
Proseminar "Vergleich von Programmiersprachen"
37
Beispiel MergeSort (VI)
slist←mergeSort ulist; llength; llist;rlist[1]llength←ρ ulist[2]slist←ulist[3]IF (llength>1) DOTO end[4]llist←(└llength:2)↑ulist[5]rlist←(-┌llength:2)↑ulist[6]llist←mergeSort llist[7]rlist←mergeSort rlist[8]slist←llist merge rlist[9]end: →FI[10]
Proseminar "Vergleich von Programmiersprachen"
38
Beispiel MergeSort (VII)
mlist←llist merge rlist
[1]m←l←r←0
[2]→LOOP
[3]→WHILE((l<ρllist)Λ(r< ρrlist)) DOTO end1
[4]IF(llist[l]<rlist[r]) DOTO lgr
[5]mlist[m]←llist[l]
[6]m←m+1
[7]l←l+1
[8]lgr:→end2 DOTO ELSE
Proseminar "Vergleich von Programmiersprachen"
39
Beispiel MergeSort (VIII)
[9]mlist[m]←rlist[r][10]m←m+1[11]r←r+1[12]end2:→FI[13]end1:→POOL[14]LOOP[15]WHILE(l<ρllist)DOTO end[16]mlist[m]←llist[l][17]m←m+1[18]l←l+1[19]end:→POOL
Proseminar "Vergleich von Programmiersprachen"
40
Beispiel MergeSort (IX)
[20]LOOP
[21]WHILE (r<ρrlist) DOTO end
[22]mlist[m]←rlist[r]
[23]m←m+1
[24]r←r+1
[25]end:→POOL
[26]
Proseminar "Vergleich von Programmiersprachen"
41
Quellen[1] Dialogsprachen; I.Kupka/ N. Wilsing; B.G.
Teubner Stuttgart[2] Einführung in APL; Ernst Dotzauer; B.I.
Hochschultaschenbücher[3] Programmieren in APL; Wolfgang K. Giloi; de
Gruyter Lehrbuch[4] APL2-Ein erster Einblick, Brown/Pakin/Polivka;
Springer-Verlag[5] www.elsop.com/wrc/humor/sel_lang.htm[6] www.jongl.de/gags_d.html