APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A...

41
APL A programming language Maria Heym

Transcript of APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A...

Page 1: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

APL

A programming language

Maria Heym

Page 2: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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]

Page 3: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

3

Besonderheiten

•Zeichensatz

•Mächtigkeit

•Abarbeitungsreihenfolge

Page 4: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

4

Gliederung1. Entstehungsgeschichte2. Anwendungsbereiche3. Typkonzepte4. Funktionsaufbau5. Zuweisung eines Wertes auf eine Variable6. Prozedurkonzepte7. Globale Programmstrukturen8. Ereignissteuerung9. Beispiel MergeSort10. Quellen

Page 5: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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

Page 6: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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

Page 7: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

7

Anwendungsgebiete

• Statistiken zur Datenanalyse

Banken, Versicherungen

• „wenn´s mal schnell gehen soll“

• Von Mathematikern, Ingenieuren & „Nicht-Programmierern“ verwendet

Page 8: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

8

Typkonzepte (I)

• Nur 2 Datentypen explizit unterscheidbar

– Zeichenketten– Zahlen

• Interne Unterscheidung zwischen Festpunkt-, Gleitpunktzahlen und Boolean

Page 9: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

9

Typkonzepte (II)

• Aus Skalaren: (homogene) dynamische Feldern

Vektoren

Matrizen

Höherdimensionale Felder

Page 10: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

10

Funktionsaufbau

• Funktionskopf:

<Fkt.dekl.> <lokale Parameter>

• Funktionsende durch

Page 11: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

11

Beispiel „Hello World“

hello_world

[1] ← `hello world`

[2]

Page 12: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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

Page 13: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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]

Page 14: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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]

Page 15: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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

Page 16: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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

Page 17: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

17

Prozedurkonzepte• Keine Deklarationsteile

• Nur externe Prozeduren

– Prozeduren vom Funktionstyp

– Prozeduren vom Anweisungstyp

• Grundsätzlich call-by-value

Page 18: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

18

Funktionstyp

• Dyadisch:x funktion y

• Monadisch:funktion z

• Niladisch:funktion

Page 19: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

19

Anweisungstyp

• Dyadisch:

r ← x funktion y

• Monadisch:

r ← funktion y

• Niladisch:

r ← funktion

Page 20: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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]

Page 21: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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]

Page 22: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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

Page 23: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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

Page 24: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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

Page 25: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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

Page 26: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

26

Globale Programmstrukturen (II)

aufrufend[1]S←1[2]aufgerufen[3]

aufgerufen[1]S←1[2]S←S+1[3]

Page 27: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

27

Globale Programmstrukturen (III)

aufrufend

S

2

Page 28: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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]

Page 29: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

29

Globale Programmstrukturen (V)

aufrufend

S

1

Page 30: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

30

Ereignissteuerung

• Keine explizite Ereignissteuerung

• Sprünge möglich

– Sprünge zu Marken– Sprünge auf Zeilennummern

Page 31: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

31

Beispiel Sprünge

sprung

[1] →ι0

[2] →3 4 5

[3] → next

[4]next: → 0

[5] →7

[6]

Page 32: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

32

Beispiel MergeSort (I)• while- Schleife; Aufruf

→ LOOP

→ WHILE c DOTO end

end: → POOL

Page 33: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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]

Page 34: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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]

Page 35: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

35

Beispiel MergeSort (IV)

• If-Verzweigung; Aufruf

IF c DOTO label1

label1: →label2 DOTO ELSE

label2: → FI

Page 36: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

Proseminar "Vergleich von Programmiersprachen"

36

Beispiel MergeSort (V)

label←IF clabel

[1]label←(~clabel[ι1])/1+clabel[1+ι1]

[2]

ELSE←0

FI←ι0

Page 37: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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]

Page 38: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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

Page 39: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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

Page 40: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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]

Page 41: APL A programming language Maria Heym. Proseminar "Vergleich von Programmiersprachen" 2 APL A double-decker bus. Its takes rows and columns of passengers.

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