Presentato in onore di APL come strumento interattivo che compie 50 anni quest'anno
sfondo
Ken [Iverson] presentò il suo documento Formalismo nei linguaggi di programmazione nell'agosto del 1963 ad una conferenza di lavoro sulle strutture del linguaggio meccanico, Princeton, NJ L'elenco dei confidenti è pieno di nomi famosi e che presto saranno noti, e alcuni futuri vincitori del Turing Award (Backus, Curry, Dijkstra, Floyd, Iverson, Newell, Perlis, Wilkes). Il documento registra anche la discussione che si è verificata dopo la presentazione, terminando con uno scambio tra Ken e [Edsger] Dijkstra , in cui la risposta di Ken alla domanda di Dijkstra è stata univoca.
Sfida
Come rappresenteresti un'operazione più complessa, ad esempio la somma di tutti gli elementi di una matrice M che sono uguali alla somma degli indici di riga e colonna corrispondenti?
Scrivi uno snippet o un'espressione (non è necessario un programma o una funzione completi) per calcolare la somma di ciascun elemento in una data matrice intera che è uguale alla somma dei suoi indici. Oppure, come dice FryAmTheEggman: data una matrice M con elementi a ij restituisce la somma di ciascuno a ij dove a ij = i + j.
È possibile supporre che la matrice si trovi già in una posizione di memoria o variabile, oppure è possibile prenderla come argomento o input. È possibile utilizzare indici basati su 0 o 1.
Casi test
0
per matrice vuota
2
0
per 0 indici basati o 2
per 1 base
1 5 2
9 4 2
5 9 6
2
per 0 in base o 10
per 1 in base
0 3 0 4
0 4 1 4
4 3 1 2
-2 4 -2 -1
11
3 -1 3 3
3 -1 3 1
6
per 0 in base o 3
per 1 in base
aneddoto
La risposta di Iverson fu ++ / ( M = ⍳ ¹ ⨢ ⍳ ¹) // M , che non è né valido nella Notazione Iverson come definita in Un linguaggio di programmazione , né in quello che alla fine divenne APL. Nella notazione di Iverson, sarebbe stato + / ( M = ⍳ ¹ ( μ ( M )) ⨢ ⍳ ¹ ( ν ( M ))) / M . Era nelle primissime versioni di APL +/(,M=(⍳1↑⍴M)∘.+⍳1↓⍴M)/,M
.