APL | |
Dato for første versjon | 1966 |
---|---|
Paradigme | matrise, funksjonell , strukturert programmering , stilltiende |
Forfatter | Kenneth E. Iverson |
Utvikler | Larry Breed, Dick Lathwell, Roger Moore et al. |
Siste versjon | ISO / IEC 13751: 2001 (1 st februar 2001) |
Skrive | dynamisk |
Påvirket av | Notasjon (matematikk) |
Påvirket | Språk J , Matlab , A + |
Implementeringer | APL \ 360 APL \ 1130 APL * Plus Sharp APL APL2 Dyalog APL NARS2000 APLX GNU APL |
Operativsystem | Tverrplattform , Windows , GNU / Linux , Mac OS X |
Tillatelse | eier, LPG |
Filutvidelser | .apl |
Den APL (opprinnelig et programmeringsspråk , uformelt Array-behandling språk ) er en informasjonsbehandling beskrivelsesspråk senere ble programmeringsspråk utviklet mellom 1957 og 1967 på Harvard ved Kenneth Iverson å beskrive praktisk samlede virksomhet på tabeller (booleans, talltaster eller, i mindre omfang, tegn). Iverson beskrev grammatikken til språket sitt som det samme som et naturlig språk ( substantiv , verb , adverb , konjunkturer , kopulater og tegnsetting ) . Imidlertid bruker ikke språket ord, men mange tegn, som hver tilsvarer et bestemt konsept.
Revolusjonerende i lanseringen (bruk terminalkulen eller skjermen mens det perforerte kortet eller teletypen ASR33 (in) fremdeles var referansen, enhver nødvendig erklæring, typing og størrelse av unødvendige variabler, dynamisk minnestyring, full interaktivitet, kortfattethet ved direkte behandling av tabeller å unngå skriving av sløyfer, utholdenhet ), ble det stadig mer vellykket frem til midten av 1980-tallet, da regnearket konkurrerte med det om små jobber, og verktøy som SAS , deretter R for arbeid med større datavolum enn 1985-regneark.
I 2020 kan tilgjengeligheten av veldig raske prosessorer som adresserer flere gigabyte RAM og eksistensen av Open Source- tolker , gjøre det igjen interessant for et publikum av entusiaster. Rob Pike , skaperen av Go- språket , snakket om det i 2014 med entusiasme, og i 2020 ga han ut offentligheten kildekoden til språket Ivy, en APL-stiftelse på Go-språket.
I GNU APL- versjonen kan den til og med brukes som skriptspråk .
Merk: Kontroller at nettleseren din godtar Unicode ; Ellers vil du se hvite rektangler eller spørsmålstegn i stedet for APL-tegn. Dette spørsmålet er detaljert på nettet. I dag (2017) utgjør ikke PC-nettlesere som Mozilla Firefox eller Microsoft Edge noe problem å vise APL-tegn i Unicode. Noen gjenværende skjermproblemer eksisterer fortsatt på Android-nettbrett .
Eksemplene er gitt i duplikat: en skjermdump som gjengir riktig uansett hvilken nettleser du bruker, og en i form av tekst som du kan kopiere / lime inn for eksempel i NARS2000 (se nedenfor) for å utføre den, muligens med noen variasjoner. Gjengivelsen av siden vil avhenge av standard skrift og zoomnivå. Du kan endre dem, for eksempel på en PC med Ctrl + mushjul, avhengig av skjermoppløsningen.
En historisk engelsk APL er gitt i PDF i IBM Systems Journal , bind 30, nr . 4 (1991)
APL har vist seg spesielt godt egnet fra starten til statistiske beregninger , sammenbrudd, konsolideringer, funksjonelle beskrivelser av arkitekturer som IBM 360 , interaktiv grafikk ( GRAPHPAK ) og noe arbeid innen kombinatorikk og teori om grafer . Den har også blitt brukt til prototyping av applikasjoner og for å skrive enkle manipuleringsspråk som en del av et infosenter ved å maskere de riktige symbolene under praktiske og meningsfylte navn, for eksempel ved å tillate enkel skriving:
GJENNOMSNITT X for (+ / X) ÷ ⍴X .
"(Summen av elementene i X) delt på antall elementer i X)"
NORMALISER X for X ÷ + / X
"Del hvert element av X med summen av alle elementene i X"
osv.
Hvis vi vurderer gigantiske tabeller, er ikke begrepet MapReduce langt unna, og faktisk bruker flere APL-implementeringer, uten at brukeren selv må kode bruken, parallelliteten til maskinvaren (se nedenfor).
Det gjør det mulig å enkelt håndtere matriser med N-dimensjoner (N varierer fra 7 til 255, avhengig av implementeringen som er vurdert, med størrelser fra 0 til 65000 og mer på hver dimensjon) på en global måte . De kraftige operasjoner, beregninger lamine ( laminering ) og operatører reduksjon / , utvidelse \ , hjemlige produkt . og utvendig produkt ∘. og drift Kompresjon / ofte unngå behovet for løkke indekser eksplisitte - og dessuten er det, går det bruk selv.
Iverson insisterte på at APL var et tankespråk så vel som et programmeringsspråk. Det er virkelig en streng og kortfattet matematisk notasjon.
APL symboler som representerer operasjoner som kan brukes i programmering som i umiddelbar beregning på konsollen, for eksempel på "Domino" ⌹som direkte reverserer en kvadratisk matrise , eller løser et overdimensjonert system av lineære ligninger i betydningen minste kvadrater hvis matrisen er Rektangulær:
a←2 2⍴⍳4 ⌹a ¯2 1 1.5 ¯0.5Det ble anslått i årene 1970-80 at et team på 5 APL-utviklere hadde utviklingskraften til et team på 25 FORTRAN- programmerere . APL-applikasjonen var mer grådig i materielle ressurser, men prisen på disse gikk stadig ned. I 2013 ga tilpasningen til smidig programmering det en fornyet interesse for alle applikasjoner som skal settes opp eller raskt utvikles, samt for applikasjoner med kort levetid. Den har blitt brukt blant annet av NASA , British Airways , Banque de France (lynøkonomiske studier), Generaldirektoratet for offentlige finanser (finanspolitisk innvirkning av nye lover) osv.
Etter å ha opplevd bunnen av bølgen i 2009, har interessen for dette språket økt betydelig siden.
Også siden 2013 har det blitt tilbudt for produksjon av servlets .
Det opprinnelige grensesnittet (to-tone i skrivemaskin-modus) inspirerte det av programvare som Maple .
APL innoverte i sin tid av flere brukervennlige aspekter:
Så å skrive “Hei, Verden! »I APL er ting som følger:
'Hei Verden !' ⍝ skrevet av brukerenHei Verden ! ⍝ svar fra terminalen
2 + 2 3 5 7 ⍝ gir4 5 7 9
Til dette må legges den spektakulære muligheten for å indeksere en matrise av en annen matrise . Så:
' KATTEN ' [7 5 2 3 4 6 7] ⍝ girKATTEN
Se:
'KATTEN' [2 3 ⍴ 7 5 2 4 6 7] ⍝ girTHE
CAT
Ingen automatisk oversettelse her verken i begge tilfeller: indeksen har ganske enkelt blitt erstattet av det som ble indeksert (dermed er T det syvende tegnet), noe som er karakteristisk for indekseringsoperasjonen. Det som er indeksert, har også form av indeksen (altså en 2x3 matrise i det andre tilfellet).
Takket være sin høyre-mot-venstre-prioritet kan språket leses enkelt, som et naturlig språk: "1 pluss summen av inversene til faktorene til heltall fra 1 til 30" vil bli skrevet:
1 ++ / ÷! ⍳30 ⍝ som gir2.718281828
Samme resultat (dvs. verdien av e ) kan oppnås ved å trykke direkte * 1
Den opprinnelige APL-en kjente bare skalarer og matriser (numerisk eller alfanumerisk). Den håndterer nå arrays of arrays og lar også brukeren definere sine egne "operatorer".
Det fungerer også i komplekse tall automatisk hvis behovene til beregningen krever det. Verdien skrives og gir følgelig . NARS2000 på sin side gjenkjenner ikke bare komplekse tall, men også kvaternioner : Hvis du skriver , skriver systemet det ut - og tolker det - som og selvfølgelig er verdt . De octonions støttes også ( ). 0J10J1*2¯1J00+1J0i0j1k00i0j1k0*2¯1i0j0k01i2j3k4l5ij6jk7kl8
Karakteren ⎕leser "quad".
⎕ ← A ← 2 2⍴⍳4 ⍝ skriver ut en matrise A i størrelse 2x2 som består av tallene fra 1 til 4samme ting på den andre aksen: kolonner
sammenføyning ved å skape en ny dimensjon: matrisen blir kube
A, [1.5] 0Denne operasjonen skapte en ny dimensjon på en annen akse.
Den ytre produkt alias kartesisk , skaper matriser fra vektorer, som en multiplikasjon tabell:
1 2∘.+10 20 30 11 21 31 12 22 32 ⎕←a←,1 2∘.+10 20 30 11 21 31 12 22 32 a[⍋a] 11 12 21 22 31 32Den primitive ⍋ , som vi kaller gradering opp , gir permutasjonen som rangerer elementene til en vektor i stigende rekkefølge (og ikke denne klassifiserte vektoren selv). Med andre ord returnerer en [⍋a] alltid en sortert vektor, og ⍋a alltid en permutasjonsvektor dannet av de permuterte elementene i ⍳⍴a , som er en kortfattet og billig måte å skape og kombinere permutasjoner på. Slike permutasjoner oppnås lett ved uttømmende valg: 52 ? 52 for trekning av 52 kort av 52.
Settsymbolene ( ∊, ∪, ∩, ⊆, ⊇, ⍦ ...) finnes i APL, og er gjenstand for spesielle utvidelser som gjør det mulig å arbeide i enkle sett (hvorav hvert element vises bare en gang) eller multisett der hvert element kan vises flere ganger, nyttig for Bose-Einstein-kombinasjoner
I henhold til elementene i disse gruppene har sin egen identitet, eller rettere sagt ikke (det vil si er ikke skiller seg ut), er det tolv forskjellige måter (in) å behandle sett.
Akkurat som en funksjon virker på en eller flere variabler , fungerer en operatør på en eller flere funksjoner (eller operasjoner). For å ta en matematisk sammenligning tilsvarer "sigma" og "pi" reduksjonsoperatøren APL (" / ") brukt på " + " og " × " -operasjonene. Sigma (summen av termer) skrives + / , "pi" (multiplikasjon mellom ord) × / , "union" ( eller logikk mellom ord) ∨ / , "sammenheng" ("og" logikk mellom ord) ∧ / osv. . Det snakkes på andre språk, lukking ( lukking ).
I den første versjonen av APL er operatørene definert på en fast måte (reduksjon ( / ), skanning ( \ ), eksternt produkt ( °. ), Sammensetning ( . ) ...). I APL2 kan brukeren lage sin egen etter ønske og gi dem navn. En operatør kan handle likegyldig på grunnleggende operasjoner av språket eller på funksjoner som er definert av brukeren i arbeidsområdet .
APL2 introduserer også umlautoperatøren ( ¨ , navngitt hver ), og generaliserer på hver nivå av hver undergruppe en operasjon i arrays of arrays .
⍳4 1 2 3 4 ⍳¨⍳4 1 1 2 1 2 3 1 2 3 4 ⍝ La fonction système ⎕fmt ("quad fmt") affiche cela plus clairement ⎕fmt ⍳¨⍳4 ┌4──────────────────────────┐ │┌1┐ ┌2──┐ ┌3────┐ ┌4──────┐│ ││1│ │1 2│ │1 2 3│ │1 2 3 4││ │└~┘ └~──┘ └~────┘ └~──────┘2 └∊──────────────────────────┘ ⊃⍳¨⍳5 1 0 0 0 0 1 2 0 0 0 1 2 3 0 0 1 2 3 4 0 1 2 3 4 5 ⎕fmt ⊃⍳¨⍳5 ┌5────────┐ 51 0 0 0 0│ │1 2 0 0 0│ │1 2 3 0 0│ │1 2 3 4 0│ │1 2 3 4 5│ └~────────┘ 6 2⍕⌹⊃⍳¨⍳5 1.00 ¯0.00 0.00 ¯0.00 0.00 ¯0.50 0.50 ¯0.00 0.00 ¯0.00 ¯0.00 ¯0.33 0.33 0.00 0.00 0.00 0.00 ¯0.25 0.25 ¯0.00 ¯0.00 ¯0.00 0.00 ¯0.20 0.20Se notat .
En operasjon kalt enclose (⊂) gjør det mulig å kapsle inn en matrise som deretter blir sett på som en skalar. Det er derfor enkelt å representere komplekse strukturer i form av matriser som har andre matriser som elementer . Eksistensen av en utfør (() -funksjon gjør det til og med mulig å inkludere funksjonsbetegnere som kan utføres på forespørsel, som i C-språket, i disse matriser . Det lar også et program generere kode selv som det deretter vil utføre, som i Lisp eller Haskell : funksjoner er da bare bestemte typer variabler. Se funksjonell programmering .
Antall indekser i en matrise kalles etter konvensjon rang (rang) i APL (ikke å forveksle med rangeringen til en matrise i lineær algebra ) og returneres alltid av ⍴⍴ . Antallet nivåer i en rekke matriser heter dybde og returnert av ≡ .
Brukeren jobber i et arbeidsområde ( arbeidsområde ) der den lagrer funksjonene og variablene. Han kan når som helst lagre det hele (inkludert i suspendert henrettelsesstatus) og senere gjenoppta arbeidet sitt nøyaktig under de forholdene der han forlot det, inkludert i staten der han ville ha avbrutt et løpende program. Kommandoer som ) COPY og ) PCOPY , og begrepet gruppe tillater enkel overføring av funksjoner og variabler fra ett arbeidsområde til et annet (en gruppe er et navn gitt til et sett med funksjoner og variabler som fungerer sammen, slik at du kan importere dem alle samtidig tid uten å detaljere navnene deres eller importere hele arbeidsområdet).
Kommersielle APL-er kommer med flere biblioteker med eksempler på arbeidsområder, både kjørbare og redigerbare. I IBMs APL2 er disse bibliotekene nummerert ) LIB 1 , ) LIB 2 , etc. (se figur til venstre).
Hvert APL2-objekt (variabel, funksjon eller operatør) blir automatisk tidsstemplet i arbeidsområdet , noe som letter den langsiktige styringen. Objektenes type og dato returneres av systemfunksjonen ⎕AT (= AT- hyllest). Sammen med ⍋ ( gradering opp ) og grade ( grad ned ) sorteringsoperasjoner , letter denne tidsstempelet utviklingsprosessen.
⎕NL (= N ame L ist) bringer tilbake listen over elementene i arbeidssonen, ⎕NL 3 bringer tilbake listen over de eneste funksjonene. Som det fremgår, gjør den horisontale sammenkoblingen av tabeller av en annen art bare ved å gjøre displayene enkle.
I NARS2000 viser systemfunksjonen ⎕vr i tillegg en funksjon med linjenumre, den siste linjen som inneholder tidsstempelet. Resultatet er en enkel vektor med tegn som inneholder noen få nye linjetegn, og standardkarakterisering av tegn blir utført av systemet.
Idiomatic APL mest nyttige ble samlet på universitetene i hvert fall siden 1977, og listen deres er oppdatert på en wiki i Unicode .
Noen av disse svingene gjelder den første APL, som ikke hadde tableaux de tableaux; de er gyldige i dag, selv om APL2 gjør det mulig å forenkle flere. IBM tilbyr en versjon som passer for APL2, og eksemplene kan kopieres / limes inn i en tolk, samt IDIOMS-arbeidsområdet i sin gratis TRYAPL2 beregnet på DOS eller hvilken som helst DOSBox . Dyalog APL gir sin egen liste. Å konsultere dem er nyttig for å gjøre deg kjent med tankegangen spesifikt for APL og oppdage konkret bruken av primitivene og operatørene.
Stanley Jordan presenterte for ACM en artikkel om bruk av APL-setninger for å hjelpe til med musikalsk komposisjon
Til slutt gir rosettacode- nettstedet flere eksempler på små problemer med løsningen i APL så vel som (generelt mindre konsis) på andre språk: https://rosettacode.org/wiki/Category:APL
Fire store open source- implementeringer av APL kan lastes ned gratis:
APL-tolker har eksistert for IBM 7090 , IBM 360 til zSeries (under TSO , VM / CMS og til og med CICS !), IBM 1130 , Xerox XDS Sigma 7 aka CII 10070 , og CII Iris 80 , Bull DPS- 7 , Burroughs B5500, Bull SEMS T1600 (tidligere Télémécanique Électrique T1600 ), Mitra-serien osv.
I 1976 skrev Sligos en APL for Iris 80 (CII) for å tilby dette språket som en fjernbehandlingstjeneste . Prosjektet ble forlatt noen måneder etter at det ble fullført på grunn av utilstrekkelig ytelse under oppkjøringen. Arbeidsområdene beregnet på migrasjonen fra 370 til Iris 80 ble litt modifisert for å tillate omvendt migrasjon.
APL ble også gitt direkte ROM i personlige datamaskiner av 1970-årene (før Apple, slik) som MCM-70 , som hadde en visning av en linje, eller den IBM 5110 Modell A og C.
Arbeidsstasjons- og PC- versjoner har også blitt gitt ut eller produsert gratis for AIX , Solaris , Linux , Windows , Mac OS , OS / 2 . Det er til og med noen for DOS (gratis versjon kalt TRYAPL2, både i engelsk og fransk versjon; franskisering ble utført av AFAPL) ... så vel som for Android !
Selskapet Microsoft hadde foretatt to implementeringer av språket i 8080 og 6800 , ifølge et brev fra Bill Gates til brukere av Altair BASIC . Suksessen med DOS til Windows og spesielt regneark Multiplan og Excel måtte forlate dette prosjektet, som ville ha et mye mindre potensielt publikum: Allmennheten krevde da nøkkelferdige applikasjoner (i eksemplet med VisiCalc på Apple II ) og ikke språk. å programmere dem selv.
Utvekslingsmekanismen kjent som hjelpeprosessorer gjør at APL-arbeidsområder kan kommunisere med omverdenen: filer, SQL / DB2 , TCP / IP , X-window , OpenGL , samt andre APL-arbeidsområder og aktive nettverkskonsoller i samme øyeblikk hvis de gir tillatelse. Vi kan dermed begynne å utvikle en beregning på en PC, så når den er utviklet, kan du utføre den eksternt på en sentral datamaskin utstyrt med dusinvis av parallelle prosessorer fra samme økt på PCen.
Hjelpeprosessorer tillater til og med arbeidsstasjonsøkter å kommunisere effektivt med eller mellom økter på samme språk på hovedrammen . Av matriseberegninger kan meget store således distribueres nettverk.
Hjelpeprosessorer er ofte kodet på C-språk .
Noen som leveres med IBM APL2 er AP124 (direkte adressering av skjermen, som forbannelser ), AP127 og AP227 (resp. Tilgang til DB2 og ODBC databaser ), AP144 og AP145 (resp. X-Window og Windows adressering ), AP200 (koordinering av separate APL-økter), AP207 (interaktiv grafikkprosessor, brukt av GRAPHPAK ).
' | ( | ) | + | , | - | . | / | : | ; | < | = | > | ? | [ | ] |
\ | _ | ¨ | ¯ | × | ÷ | ← | ↑ | → | ↓ | ∆ | ∇ | ∘ | ∣ | ∧ | ∨ |
∩ | ∪ | ∼ | ≠ | ≤ | ≥ | ≬ | ⊂ | ⊃ | ⌈ | ⌊ | ⊤ | ⊥ | ⋆ | ⌶ | ⌷ |
⌸ | ⌹ | ⌺ | ⌻ | ⌼ | ⌽ | ⌾ | ⌿ | ⍀ | ⍁ | ⍂ | ⍃ | ⍄ | ⍅ | ⍆ | ⍇ |
⍈ | ⍉ | ⍊ | ⍋ | ⍌ | ⍍ | ⍎ | ⍏ | ⍐ | ⍑ | ⍒ | ⍓ | ⍔ | ⍕ | ⍖ | ⍗ |
⍘ | ⍙ | ⍚ | ⍛ | ⍜ | ⍝ | ⍞ | ⍟ | ⍠ | ⍡ | ⍢ | ⍣ | ⍤ | ⍥ | ⍦ | ⍧ |
⍨ | ⍩ | ⍪ | ⍫ | ⍬ | ⍭ | ⍮ | ⍯ | ⍰ | ⍱ | ⍲ | ⍳ | ⍴ | ⍵ | ⍶ | ⍷ |
⍸ | ⍹ | ⍺ | ⎕ | ○ |
Ikke alle APL-tegn er ennå forbundet med en mening i dag (2020). GNU APL, Dyalog APL og NARS2000 bruker tre: ⍺ og ⍵ , som betegner det første og siste argumentet til en funksjon, og λ som betegner resultatet. Eksempel:
)FNS SUM ∇SUM[⎕]∇ [0] λ←⍺ SUM ⍵ [1] λ← ⍺ + ⍵Definisjonen av denne funksjonen vil gjøres av SUM ← { ⍺ + ⍵ }. Det gjennomsnittet vil bli gjort på samme måte av moyenne←{(+/⍵)÷⍴⍵}. Det er faktisk funksjonell programmering .
⍝ Surface d'un polygone en Dyalog APL surface←{÷∘2⊢-/{+⌿×/⍵}¨(0 1)(1 0)⊖¨⊂⍵} ⍝ définit la fonction "surface" surface↑⌽(0 3)(3 0)(0 0) ⍝ applique cette fonction à un triangle donné 4.5⍺ og ⍵ representerer operandene til en funksjon ovenfor . På samme måte og ved konvensjon ⍺⍺ og fonctions representerer de funksjoner som en operatør gjelder .
Noen implementeringer som NARS2000 gir matematisk kraftig bruk av andre symboler.
I Mai 2010, er de viktigste APL-skriftene som kan lastes ned fra Internett:
APL2 Unicode- tegnene er definert i en av planene til Arial-fonten , og tillater derfor å kopiere / lime inn direkte fra APL fra en beregningsøkt (eller til og med en webside) til en tekstbehandler eller omvendt, noe som var praktisk umulig før Unicode.
Unicode APL, kodet i UTF-8 , lar deg:
Nettlesere har respektert visningen av APL-tegn siden 2010. Mange nettbrett er i stand til dette i 2015.
Ble det originale APL-tastaturoppsettet for USA valgt av mnemoniske hensyn , for eksempel ? assosiert med Q ( spørsmålstegn ) ⍴ ( rho ) med R , etc. Et spørsmål var å vite om det franske APL-tastaturet måtte knytte et tegn til selve nøkkelen ( ? Ville da være assosiert med A og ikke lenger med Q ) eller med dets betydning (som ville hatt den effekten at de kombinerte franske spesifisiteter til spesifisitetene til APL.
Spørsmålet er mindre trivielt enn det ser ut til: bruk av APL krever mye konsentrasjon . Hvis konsentrasjonen avbrytes av et spørsmål på tasten for å skrive på tastaturet og / eller modifikatoren for å trykke (Shift, Alt eller Ctrl) under skriving, vil bruken av dette språket bli ineffektivt, uavhengig av kvaliteten ved avreise.
Du kan også lage et tilpasset tastaturoppsett, enten det er i Windows eller i X-Window ( setxkbmap -layout us,apl -variant ,dyalog -option grp:lswitchmen til skade for interoperabilitet hvis du bruker andre maskiner enn din egen.
Dette 5-siders dokumentet beskriver en mulig implementering av et APL-tastatur under Linux:
Regnearkets utseende , mer intuitivt og enklere å bruke, har fjernet en del av språkets interesse. Dette forringer imidlertid ikke uttrykksevnen og kortfattetheten, og flere APL-tolker kan lastes ned gratis på Internett , for PC (Linux eller Windows) som for Macintosh . APL / APL2 tegn er tilstede i Unicode .
APL dekker matriser globalt, implementeringene utnytter lett muligheten for parallelle eller rørledningsberegninger til moderne prosessorer. De bruker utstrakt vektorkapasitetene til S / 390 (zSeries) , PowerPC ( Optimized Pipeline of Similar Instructions) og Multimedia Instructions ( SSE ) -arkitektur i Intel / AMD-arkitekturen. I den grad APL behandler tabellene globalt uten å pålegge detaljene i behandlingen, kan flere av dets primitiver og operatører implementeres i CUDA parallell databehandling , eller til og med i kvante , lokal eller ekstern databehandling hvis databehandlingskretser av denne typen blir tilgjengelige.
Operatøren ∘ gjør det mulig å uttrykke det kartesiske produktet mellom to datavektorer, derfor alle kombinasjoner av operandene deres (operasjon i N ^ 2) og deretter operatøren / å komprimere resultatet i henhold til en annen operasjon. Helheten uttrykker den kombinatoriske beregningen som er forespurt fra denne kalkulatoren, akkurat som et SQL-spørsmål uttrykker det som blir bedt om fra en database, uten å måtte gå inn i detaljene i beregningen.
Dyalog APL versjon 17.0 (juli 2018) bruker automatisk vektorinstruksjoner fra x64-, POWER- og ARM-arkitekturer.
To etterfølgere av APL er A + -språket , og J- språket , sistnevnte er blitt promotert av KE Iverson selv, og ikke krever bruk av spesialtegn. APL har bedre lesbarhet, forutsatt at du har riktig skrift. Selve språket hadde ikke vært mulig så tidlig som i 1969 uten at IBM-ballterminalene også ble kalt Selectric (for eksempel 2741 ). På de rent alfanumeriske 2260 terminalene var det nødvendig å bruke nøkkelord som var vanskelige å lese. De 3270 terminalene , starter med 3277, og senere aktiveres APL tegnsett, samt små latinske bokstaver.
For informasjon blir beregninger på en Celeron 300 MHz fra 2004 gjort på omtrent en tidel av beregningstiden de tok i 1970 på en IBM 360/91 . Tolkenes kjerne sitter helt i instruksjonsbufferen til en moderne mikroprosessor (2020), og gir APL- kjøretidsytelse som kan sammenlignes med kompilerte språk , som i dette eksemplet:
⎕cr 'test' test;s ⎕ts s←+/÷⍳1000000 ⎕ts test 2016 5 7 14 20 52 301 2016 5 7 14 20 52 350Vi ser her at beregningen av det harmoniske tallet H 1000000 tar 49ms (350 - 301) i tidsstempelet . Denne beregningen ble utført på et Core i7 4500U, passord på rundt 3800. Det tar 36 ms på en Core i7 4790 med passord på 10 000 (sammenlign, på denne andre maskinen, med 13 ms for samme beregning på C-språk og, merkelig, 13 ms også i Dyalog APL 64 bits versjon 15).
Graphpak er et av arbeidsområdene som leveres med IBM APL og kan kombineres med andre brukerapplikasjoner for å gi det 2D- og 3D-grafikkinngang / -utgangsmuligheter. Strukturen til språkanropene (ingen behov for parenteser for samtalene av funksjoner og underrutiner) gjør det mulig å gi ordrer som har et vagt utseende av naturlig språk. IBM- og AP- elementene , som leveres med dette arbeidsområdet, er ganske enkelt matriser som inneholder koordinater for punkter i henholdsvis 2D og 3D, den første kolonnen angir en indikasjon på tegning (farge og stil), de andre koordinatene i x , y og muligens z . Funksjoner tillater også grafisk inngang med musen eller styreflaten .
APL sparer bruken av indekser og sløyfer ved å multiplisere operatørene, og tillater rask og kortfattet skriving av uttrykk eller programmer som ville være mye lenger med et klassisk språk. Med tanke på språkets kompaktitet og kraft, vurderte noen purister for en tid at de var "elegante", et APL-program bør ikke overstige en linje med kode. Disse programmene, kalt one-liners i gjennomgangen av ACM APL Quote-Quad, var forfedrene til det verdige som senere vil bli Hebdogiciel .
Noen rekreasjonsproblemer ble noen ganger stilt. For eksempel "hvordan gjennomføre summen av elementene i en gruppe A (i prinsippet + / A ) når tastene + og / ikke fungerer? ". Et mulig svar var 1⊥A (evaluering av A som et tall uttrykt i base 1!). En annen var "hvordan å finne den mest konsis beregne gjennomsnittet av en vektor V (vanligvis notert (+ / V) ÷ ⍴V ) med respons til V⌹V = V .
Imidlertid har mangfoldet av tegn, deres unary eller binære bruk, superposisjoner av tegn som skal uttrykke dem på tidspunktet for elektromekaniske terminaler, kvalifisert dette språket som kryptisk . Fraværet av betingede mekanismer førte også til at alle brukte forskjellige triks som var skadelige for lesbarheten og vedlikeholdet av applikasjoner, bortsett fra å innføre funksjoner i navnet så meningsfylt som mulig.
⎕cr 'if' z←a if b z←b/a 'bonjour' if 1<0 'bonjour' if 1<3 bonjourNoen veldig spesielle tilfeller av semantikk delte de forskjellige redaktørene. Således, hvis A, B og C er tre vektorer med tre elementer, skal uttrykket forstås A B C[2]som en vektor av vektorer som har elementene vektoren A, vektoren B og den skalære C [2]? Dette er tolkningsvalget til NARS2000. Det er også det for GNU APL, som IBM for dets APL2.
Dyalog, den første som introduserte arrays of arrays i en kommersiell APL, tok deretter det motsatte valget og anså uttrykket for å være tilsvarende B. Selv om det er tilstrekkelig å bruke parentes for å unngå tvetydighet, introduserte denne redaktøren som ikke ønsket å introdusere porteringsproblemer en ny systemvariabel, ⎕ML ( migreringsnivå ). Hvis denne variabelen er på 0, gjelder Dyalog-tolkningen. Ellers er det den generelle tolkningen. Verdien av denne systemvariabelen kan også være forskjellig i forskjellige funksjoner som gir den en lokal verdi (for eksempel i et økosystem av funksjoner), og muliggjør fleksibel interoperabilitet.
APL har aldri offisielt kjent assosiative tabeller , og indekserer en matrise med noe annet enn heltallverdier, innlemmet i andre tolket språk (Perl, Javascript, PHP ...). Vi kan derfor ikke skrive:
KAPITAL [⊂'FRANCE '] ← ⊂'PARIS'
eller å holde seg i vektoren,
CAPITAL ['FRANKRIKE' 'SPANIA' 'ITALIA'] ← 'PARIS' 'MADRID' 'ROME'
som er bindende, fordi:
Det er ikke veldig ergonomisk å omgå dette gapet på bekostning av flere variabler, for eksempel: FRANKRIKE ← 32 (derfor CAPITALE [FRANKRIKE] ← ⊂ "PARIS" . Hvis landet kommer fra et anfall, kan indeksen bli funnet av "execute": ⍎ "FRANKRIKE" som returnerer 32, men applikasjonen taper i robusthet og symboltabellen er unødvendig rotete (APL / X omgår vanskeligheten med navneområder ).
En annen måte er å definere en vektor av landnavn: PAYS ← 'BELGIQUE' 'FRANKRIKE' , instruksjonen blir da: CAPITAL [PAYS⍳⊂'FRANCE '] ← ⊂'PARIS'
Men i dette tilfellet, uavhengig av lavere lesbarhet, har tilgangstiden ikke lenger det minste forhold til en direkte "hash" -typetilgang i Perl eller PHP, spesielt hvis det er hundrevis av navn. Ikke bare får lesbarheten til programmene ingenting, men deres enkle vedlikehold kollapser gitt variablene som er lagt til i programmet.
Dette behovet tas med i målene for NARS-prosjektet. Dyalog PLA kommer seg rundt med ikke-standardiserte mekanismer, navnerom ( navnerom ).
Dyalog tilbyr noen arbeidsområder og PDF-dokumentasjoner om objekttilnærmingen i APL , samt om funksjonell programmering . En spesielt tydelig redegjørelse for APL som en algebraisk notasjon gjort mer sammenhengende enn i klassisk algebra, og inkluderer elementer av funksjonell programmering og utført på Google av Morten Kromberg kan sees her .
Uten å måtte installere APL , kan vi prøve det på denne siden: http://tryapl.org/ for å skrive inn noen uttrykk, utføre dem og undersøke resultatet (venstre illustrasjon).
For å inkludere de valgte APL-tegnene i testlinjen, klikk på dem i venstre del av skjermen ("Primer" -fanen). Den ⎕PP ( utskrift presisjon ) systemvariabel angir antall desimaler som skal vises. Andre variabler er ⎕IO ( opprinnelsesindeks , 0 eller 1), ⎕TS ( tidsstempel , tidsstempel) osv. Forslag til uttrykk som skal utføres foreslås når musepekeren går over et bestemt tegn, blant annet operatorene for stigende og synkende sortering, ⍋ ( grad opp og ⍒ ( grad ned ). Trefflinjen utføres når Send-tasten (ny linje) trykkes, hvoretter resultatet av utførelsen vises og et nytt uttrykk kan angis.
Denne TryAPL-siden tilbys av et selskap, Dyalog , som autoriserer gratis nedlasting av en komplett versjon av tolk (32-biters eller 64-biters versjon) for personlig og ikke-kommersiell bruk. Hver gratisversjon "tatoveres" av et serienummer som tildeles rekvirenten på personlig basis. For andre formål enn personlig er det også forretningslisenser.