APL

Fra Wikipedia, den frie encyklopædi
Spring til navigation Spring til søgning
Disambig bordered fade.svg For alternative betydninger, se APL (flertydig). (Se også artikler, som begynder med APL)

APL (som står for A Programming Language, alternativt Array Programming Language)[1] er et fortolket programmeringssprog oprindeligt udviklet af Kenneth E. Iverson da han var ved Harvard University og siden videreudviklet af IBM. Dets styrke er behandling af matricer og vektorer gennem specielle kommandotegn, der nødvendiggør specielle symboler.[2][3] Notationen anvendtes bl.a. til at beskrive arkitekturen for IBM System/360.[4]

Iverson modtog i 1979 en "Turing Award" for sit arbejde med APL.[5]

Historie[redigér | redigér wikikode]

Iverson udgav sin notation i en bog med titlen A programming Language 1962.[1] I 1964 blev en delmængde af notationen implementeret som et programmeringssprog.[3] I starten af 1980'erne præsenterede IBM en betydeligt generaliseret og udvidet version som man kaldte APL2. Indtil den anden halvdel af 1980'erne var IBM den dominerende leverandør af APL implementeringer. I starten af 1990'erne udviklede flere mindre virksomheder konkurrerende versioner af sproget, bl.a. APL2000 fra STSC og Dyalog APL fra Dyalog Ltd og disse versioner har siden på forskellig vis videreudviklet sproget.

Iverson konstruerade en efterfølger til APL kaldet "J" som kun anvender ASCII. Der findes andre sprog der har funktionalitet i stil med APL. "A+" er et open source-programmeringssprog der deler mange kommandoer med APL.

Eksempel[redigér | redigér wikikode]

Følgende APL-program finder alle primtal fra 2 til 6:

Dette er hvad der sker hvis R sættes til 6 (læst fra højre mod venstre):

  • Variablen R tildeles værdien 6 (tildelnings-primitivet )
  • En vektor med værdierne fra 1 til 6 dannes (funktionen )
  • Element nr 1 fra venstre (her tallet 1) i denne vektor fjernes (funktionen )
  • Den på denne måde reducerade vektor tildeles variabelen R. (tilldelnings-primitivet ). Læg mærke til at den samme variabel kan tildeles helt andre datatyper under programmets udførsel, i dette tilfælde først heltallet 6 og derefter vektoren (2,3,4,5,6)
  • Til venstre for R står reduktionsfunktionen, / , med et udtryk i parenteser yderligere til venstre.
  • Parentesen udføres først. Beregn det ydre produkt R multipliceret med R, dvs. i dette tilfælde en matrice med 5 x 5 elementer hvor elementi j er Ri x Rj (ydre produkt funktionen dannes med operatoren anvendt på funktionen ), f.eks.
4 6 8 10 12
6 9 12 15 18
8 12 16 20 24
10 15 20 25 30
12 18 24 30 36
  • Dan en vektor med samme længde som vektoren R, hvor elementet er 1 hvis et element i R også findes i ydre produkts matricen, ellers 0. I dette tilfælde vektoren (0,0,1,0,1). ("tilhører"-funktion )
  • Inverter denne vektor, dvs. byt 0 med 1 og 1 med 0 (negerings-funktionen ). Parentesen indeholder nu en vektor med værdierne (1,1,0,1,0).
  • Nu til reduktionsfunktionen / . Udvælg de elementer i vektoren R hvor det tilsvarende element i den netop dannede vektor er lig med 1. Vi får vektoren (2,3,5)
  • Udskriv resultatet (sker automatisk. Resultatet af en linje i et APL-program skrives ud, hvis ikke den sidste operation er tildelings-primitivet)

Referencer[redigér | redigér wikikode]

  1. ^ a b Iverson, Kenneth E. (1962). A Programming Language. Wiley. ISBN 0-471-43014-5. Hentet 27. november 2017. 
  2. ^ McIntyre, Donald B. (1991). "Language as an Intellectual Tool: From Hieroglyphics to APL". IBM Systems Journal 30 (4): 554–581. doi:10.1147/sj.304.0554. Hentet 27. november 2017. 
  3. ^ a b A. D. Falkoff, K. E. Iverson (1973). "The design of APL". IBM Journal of Research and Development 17 (4): 324-334. doi:10.1147/rd.174.0324. Hentet 27. november 2017. 
  4. ^ Falkoff, A.D., Iverson, K.E., Sussenguth, E.H. (1964). "A formal description of SYSTEM/360". IBM Systems Journal 3 (2): 198 - 261. doi:10.1147/sj.32.0198. Hentet 27. november 2017. 
  5. ^ Turing Award Citation 1979. Awards.acm.org. Hentet 27. november 2017. 

Eksterne henvisninger[redigér | redigér wikikode]

ProgrammeringStub
Denne artikel om datalogi eller et datalogi-relateret emne er kun påbegyndt. Hvis du ved mere om emnet, kan du hjælpe Wikipedia ved at udvide den.