Apresentado em homenagem à APL como uma ferramenta interativa que completa 50 anos este ano
fundo
Ken [Iverson] apresentou seu artigo Formalismo em linguagens de programação em agosto de 1963, em uma Conferência de Trabalho sobre Estruturas Mecânicas de Linguagem, Princeton, NJ. (Backus, Caril, Dijkstra, Floyd, Iverson, Newell, Perlis, Wilkes). O artigo também registra a discussão que ocorreu após a apresentação, terminando com uma troca entre Ken e [Edsger] Dijkstra , na qual a resposta de Ken à pergunta de Dijkstra foi uma frase.
Desafio
Como você representaria uma operação mais complexa, por exemplo, a soma de todos os elementos de uma matriz M que são iguais à soma dos índices de linha e coluna correspondentes?
Escreva um trecho ou expressão (sem necessidade de um programa ou função completo) para calcular a soma de cada elemento em uma matriz inteira que é igual à soma de seus índices. Ou, como FryAmTheEggman coloca: dada uma matriz M com elementos a ij retorna a soma de cada a ij onde a ij = i + j.
Você pode assumir que a matriz já está em um local de variável ou memória, ou pode ser aceita como argumento ou entrada. Você pode usar índices baseados em 0 ou 1.
Casos de teste
0
para matriz vazia
2
0
para índices baseados em 0 ou 2
para índices baseados em 1
1 5 2
9 4 2
5 9 6
2
para 0 com base ou 10
para 1 com 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
para 0 com base ou 3
para 1 com base
Anedota
A resposta de Iverson foi ++ / ( M = ⍳ ¹ ⨢ ⍳ ) // M , que não é válida na Notação Iverson conforme definida em A Programming Language , nem no que acabou se tornando APL. Em notação Iverson, que teria sido + / ( M = ⍳ ¹ ( μ ( M )) ⨢ ⍳ ¹ ( ν ( M ))) / M . Nas primeiras versões do APL era +/(,M=(⍳1↑⍴M)∘.+⍳1↓⍴M)/,M
.