Presentado en honor a APL como una herramienta interactiva que cumple 50 este año
Fondo
Ken [Iverson] presentó su artículo Formalismo en lenguajes de programación en agosto de 1963 en una Conferencia de trabajo sobre estructuras de lenguaje mecánico, Princeton, NJ La lista de congresistas está llena de nombres famosos y que pronto serán famosos, y algunos ganadores futuros del Premio Turing (Backus, Curry, Dijkstra, Floyd, Iverson, Newell, Perlis, Wilkes). El documento también registra la discusión que tuvo lugar después de la presentación, que terminó con un intercambio entre Ken y [Edsger] Dijkstra , en el que la respuesta de Ken a la pregunta de Dijkstra fue de una sola línea.
Reto
¿Cómo representaría una operación más compleja, por ejemplo, la suma de todos los elementos de una matriz M que son iguales a la suma de los índices de fila y columna correspondientes?
Escriba un fragmento o expresión (sin necesidad de un programa o función completa) para calcular la suma de cada elemento en una matriz entera dada que sea igual a la suma de sus índices. O, como dice FryAmTheEggman: dada una matriz M con elementos a ij devuelve la suma de cada a ij donde a ij = i + j.
Puede suponer que la matriz ya está en una ubicación variable o de memoria, o puede tomarla como argumento o entrada. Puede usar 0 o 1 índices basados.
Casos de prueba
0
para matriz vacía
2
0
para índices basados en 0 o 2
para índices basados en 1
1 5 2
9 4 2
5 9 6
2
para 0 basado o 10
para 1 basado
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
para 0 basado o 3
para 1 basado
Anécdota
La respuesta de Iverson fue ++ / ( M = ⍳ ¹ ⨢ ⍳ ¹) // M , que no es válida en la notación de Iverson como se define en un lenguaje de programación , ni en lo que finalmente se convirtió en APL. En la notación Iverson, que habría sido + / ( M = ⍳ ¹ ( μ ( M )) ⨢ ⍳ ¹ ( ν ( M ))) / M . En las primeras versiones de APL lo era +/(,M=(⍳1↑⍴M)∘.+⍳1↓⍴M)/,M
.