Prezentowane na cześć APL jako interaktywne narzędzie, które w tym roku skończy 50 lat
tło
Ken [Iverson] przedstawił swój artykuł Formalizm w programowaniu języków w sierpniu 1963 r. Na konferencji roboczej w sprawie mechanicznych struktur językowych, Princeton, NJ. Lista uczestników jest pełna sławnych i niedługo sławnych nazwisk oraz kilku przyszłych zwycięzców nagrody Turinga (Backus, Curry, Dijkstra, Floyd, Iverson, Newell, Perlis, Wilkes). W artykule zapisano również dyskusję, która miała miejsce po prezentacji, kończącą się wymianą między Kenem a [Edsgerem] Dijkstrą , w której odpowiedź Kena na pytanie Dijkstry była jednokierunkowa.
Wyzwanie
Jak przedstawiłbyś bardziej złożoną operację, na przykład sumę wszystkich elementów macierzy M, które są równe sumie odpowiednich indeksów wierszy i kolumn?
Napisz fragment kodu lub wyrażenie (nie potrzeba pełnego programu lub funkcji), aby obliczyć sumę każdego elementu w danej macierzy liczb całkowitych, która jest równa sumie jego indeksów. Lub, FryAmTheEggman mówi: podane macierz M elementy ij powrotu sumy każdego ij gdzie ij = i + J.
Możesz założyć, że macierz jest już w miejscu zmiennej lub pamięci, lub możesz potraktować ją jako argument lub dane wejściowe. Możesz użyć indeksów opartych na 0 lub 1.
Przypadki testowe
0
dla pustej matrycy
2
0
dla indeksów opartych na 0 lub 2
dla bazujących na 1
1 5 2
9 4 2
5 9 6
2
dla 0 lub 10
1 dla
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
dla 0 lub 3
1 dla
Anegdota
Odpowiedź Iversona brzmiała ++ / ( M = ⍳ ¹ ⨢ ⍳ ¹) // M , co nie jest ani poprawne w notacji Iverson, jak zdefiniowano w A Programming Language , ani w tym, co ostatecznie stało się APL. W notacji Iverson, byłoby + / ( M = ⍳ đ ( μ ( M )) ⨢ ⍳ đ ( ν ( M ))) / M . Tak było w pierwszych wersjach APL +/(,M=(⍳1↑⍴M)∘.+⍳1↓⍴M)/,M
.