2.6        APL

APL (A Programming Language) fu ideato da Kenneth Iverson nel 1960 all'Università di Harvard e nel 1962 ne è pubblicata la descrizione. Nel 1964 diventa disponibile APL\360 sui potenti sistemi IBM 360. APL ottiene un grande successo: nel 1969 ad una conferenza IBM ad Armonk si presentano in 500. Per APL Iverson ottiene il Touring Award nel 1980. Iverson con Roger Hui, per rendere APL più accessibile, creò J in cui le funzioni utilizzano i codici ASCII.

APL è un linguaggio di programmazione potente, conciso e criptico. Di esso Dijkstra disse: "APL is a mistake, carried through to perfection. It is the language of the future for the programming techniques of the past: it creates a new generation of coding bums."  (APL è un errore, reso perfetto. E’ il linguaggio del futuro per le tecniche di programmazione del passato: esso crea una nuova generazione di codici del c…). D’altra parte David Given afferma: "APL, in which you can write a program to simulate shuffling a deck of cards and then dealing them out to several players in four characters, none of which appear on a standard keyboard" (APL, in cui si può scrivere un programma che mescola un mazzo di carte e lo distribuisce a più giocatori in quattro caratteri, nessuno dei quali è presente su una tastiera standard[1])

APL nasce dall'esigenza di disporre di uno strumento di calcolo scientifico interattivo da utilizzare tramite il time sharing del sistema operativo. In APL ad ogni funzione è esprimibile con un simbolo o una coppia, di simboli, inoltre, per avere più simboli a disposizione si rinunciò alle lettere minuscole, sostituendole con lettere greche o simboli in generale non appartenenti alla codifica ASCII, da ciò la necessità di disporre di tastiere particolari[2].

APL lavora in un ambiente o workspace in cui convivono dati e programmi, in origine, l’input output era limitato a tastiera-video con un rudimentale editor.

Le funzioni hanno zero, uno o due operandi, in questo caso si utilizza la notazione infissa. Lo stesso simbolo può essere usato in funzioni unarie o binarie, generalmente con funzionalità correlate, nella tabella che segue ve n’è un limitato repertorio.

Simbolo

Funzione unaria

Funzione binaria

Esempi

*

ex

ba

16*.5 -> 4    *1 -> 2.718281829

ln x

logb x

10100 2

trigonometriche

((1○R)*2)+((2○R)*2) -> 1

ρ

dimensione

ristrutturazione

ρ1 2 5 -> 3  4ρ1 -> 1 1 1 1

ι

generatore

 

ι6 -> 1 2 3 4 5 6

?

numero a caso

numeri a caso

?6 17 -> 1 8   3?6 -> 5 1 6

Inoltre il simbolo è l’assegnazione, che combinata con simbolo indica immissione di dati (←□) o emissione di dati (□←).

Gli operatori di confronto sono funzioni binarie il cui risultato vale 0 o 1 equivalenti a vero o falso.

      (3*2+4*2)*.5

19683

      ((3*2)+(4*2))*.5

5

 L’interpretazione delle istruzioni avviene da destra verso sinistra, tenendo conto delle parentesi, ma senza precedenze fra gli operatori, ad esempio il calcolo corretto, in APL, dell’ipotenusa del triangolo rettangolo di cateti 3 e 4 è riportato nella seconda formula qui a lato.

APL2 distingue fra funzioni ed operatori; le funzioni hanno come argomento dei dati e producono dati, gli operatori si applicano a funzioni, per produrre nuove funzioni.

L’operatore riduzione / applica una funzione agli elementi di un vettore; l’operatore scan \ applica una funzione agli elementi ridotti di un vettore, il risultato è un vettore delle stesse dimensioni i cui elementi sono le successive riduzioni dell’operatore:

         1 + 2 + 3 + 5 + 7 + 11 + 13
   42
         +/ 1 2 3 5 7 11 13
   42
         +\ 1 2 3 5 7 11 13
   3 6 11 18 29 42

L’operatore outer product °. su una funzione binaria, la applica abbinando gli elementi di destra con tutti quelli di sinistra, nell’esempio di Figura 18 il vettore 1 2 3 4 5 6 (ι6) è confrontato col vettore contenente N numeri a caso fra 1 e 6, il risultato è una matrice 6xN, in cui la riga i-esima contiene 1 dove il vettore N contiene i, altrimenti 0.

Non esistono strutture analoghe al for o al while, di fatto sia le funzioni che gli operatori, in particolare l’operatore di riduzione e l’outer product suppliscono efficacemente. Il goto è realizzato da ®espressione dove espressione può essere vuota ed il salto non avviene o contiene il numero di istruzione a cui saltare.

La scarsità di simboli ha obbligato ad una bizzarra implementazione delle funzioni trigonometriche: la funzione , se monodica produce π volte l’operando: ○1 3.141592654; se diadica, n○x calcola, in funzione di n, funzioni trigonometriche ed iperboliche, ad esempio 1○x, 2○x, e 3○x sono rispettivamente sen(x), cos(x), tg(x).

[0] RECT;G;R

[1] 'IMMETTERE ANGOLO IN GRADI'

[2] G←□

[3] R←○G÷180

[4] G 'GRADI =' R 'RADIANTI'

[5] ((1○R)*2)+((2○R)*2)

      RECT

IMMETTERE ANGOLO IN GRADI

□:

      30

 30 GRADI = 0.5235987756 RADIANTI

1

Z←DADI N

□←Z←+/(ι6)°.= □←?Nρ6

Z←(+/(Z-N÷6)*2)÷(N÷6)

Figura 18

 

Le due istruzioni a lato eseguono il test del chi quadro (v. par. 4.2.1 ) sul generatore di numeri random, simulando il lancio di un dado N volte: ?Nρ6, contando quante volte le 6 facce compaiono +/(ι6)°.= ..., ed infine applicando la formula; la prima  linea è il prototipo delle funzione; qui di sotto l’esecuzione della funzione, i simboli □← visualizzano i risultati intermedi.

      DADI 60

5 3 5 5 6 1 3 6 3 3 1 4 5 6 3 5 4 3 3 3 2 6 4 5 1 5 2 4 6 2 4 1 3 1 2 1 2 5 1 3 6 2 2 5 1 6 1 1 5 6 1 1 5 1 5 2 3 4 4 1

14 8 11 7 12 8

3.8

      DADI 60

6 5 3 1 1 6 6 5 6 2 5 4 2 2 1 3 3 6 1 4 3 6 5 4 2 4 4 4 2 1 6 2 4 4 3 1 3 1 4 4 3 6 1 3 1 2 6 6 5 6 5 5 6 3 4 5 5 3 2 3

9 8 11 11 9 12

1.2

Esistono funzioni per trattare matrici, (moltiplicazione, inverso, rotazione, ordinamento, estrazione, ecc) funzioni logiche.

Inoltre essendo un ambiente interprete è presente la funzione execute che permette di eseguire istruzioni costruite. Gli strumenti introspettivi permettono di elencare variabili ()VARS, )NMS), funzioni ()FNS) e i valori di variabili di sistema.


[1] 5 8 ρ40?40 8 carte a 5 giocatori.

[2] gli esempi che seguono sono stati realizzati con una versione IBM per PC, che, non avendo la tabella ASCII i simboli APL, li ha sostituiti  con lettere speciali e simboli grafici. In questo capitolo si è cercato di rendere l’aspetto originale di APL