Präsentiert zu Ehren von APL als interaktives Tool zum 50. Geburtstag in diesem Jahr
Hintergrund
Ken [Iverson] präsentierte seine Arbeit Formalism in Programming Languages im August 1963 auf einer Arbeitskonferenz über mechanische Sprachstrukturen in Princeton, New Jersey (Backus, Curry, Dijkstra, Floyd, Iverson, Newell, Perlis, Wilkes). Das Papier zeichnet auch die Diskussion auf, die nach der Präsentation stattfand, und endete mit einem Austausch zwischen Ken und [Edsger] Dijkstra , in dem Kens Antwort auf die Frage von Dijkstra ein Einzeiler war.
Herausforderung
Wie würden Sie eine komplexere Operation darstellen, zum Beispiel die Summe aller Elemente einer Matrix M, die gleich der Summe der entsprechenden Zeilen- und Spaltenindizes sind?
Schreiben Sie ein Snippet oder einen Ausdruck (es ist kein vollständiges Programm oder eine vollständige Funktion erforderlich), um die Summe jedes Elements in einer gegebenen Ganzzahlmatrix zu berechnen, die der Summe seiner Indizes entspricht. Oder, wie FryAmTheEggman es ausdrückt: Wenn eine Matrix M mit Elementen a ij gegeben ist , wird die Summe von jedem a ij mit a ij = i + j zurückgegeben.
Sie können davon ausgehen, dass sich die Matrix bereits in einer Variablen oder einem Speicherort befindet, oder Sie können sie als Argument oder Eingabe verwenden. Sie können Indizes mit 0 oder 1 verwenden.
Testfälle
0
für leere Matrix
2
0
für 0-basierte Indizes oder 2
für 1-basierte
1 5 2
9 4 2
5 9 6
2
für 0 basierend oder 10
für 1 basierend
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
für 0 basierend oder 3
für 1 basierend
Anekdote
Iverson Antwort wurde ++ / ( M = ⍳ ¹ ⨢ ⍳ ¹) // M , das weder gültig in der ist Iverson Notation wie definiert in einer Programmiersprache , noch in dem, was APL wurde schließlich. In Iverson Notation, wäre es gewesen + / (haben M = ⍳ ¹ ( μ ( M )) ⨢ ⍳ ¹ ( ν ( M ))) / M . In den allerersten Versionen von APL war es +/(,M=(⍳1↑⍴M)∘.+⍳1↓⍴M)/,M
.