Презентований на честь APL як інтерактивний інструмент, яким виповнилося 50 років цього року
Фон
Кен [Іверсон] представив свою працю « Формалізм в мовах програмування» в серпні 1963 р. На робочій конференції з механічних структур мови, Прінстон, штат Нью-Джерсі, Список учасників переповнений відомими і скоро відомими іменами та кількома майбутніми лауреатами премії Тьюрінга (Backus, Curry, Dijkstra, Floyd, Iverson, Newell, Perlis, Wilkes). Документ також фіксує дискусію, яка відбулася після презентації, закінчуючи обміном між Кеном та [Едсгером] Дійкстра , в якому відповідь Кена на питання Дікстра була однолінійною.
Виклик
Як би ви представляли більш складну операцію, наприклад, суму всіх елементів матриці M, які дорівнюють сумі відповідних індексів рядків і стовпців?
Напишіть фрагмент або вираз (не потрібно повною програмою чи функцією), щоб обчислити суму кожного елемента в заданій цілій матриці, яка дорівнює сумі його індексів. Або, як стверджує FryAmTheEggman: задана матриця M з елементами a ij повертає суму кожного a ij, де a ij = i + j.
Ви можете припустити, що матриця вже знаходиться у змінній або пам'яті, або ви можете взяти її як аргумент або вхід. Ви можете використовувати індекс на основі 0 або 1.
Тестові кейси
0
для порожньої матриці
2
0
для 0 індексів на основі або 2
для 1 на основі
1 5 2
9 4 2
5 9 6
2
для 0 на основі або 10
для 1 на основі
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
для 0 на основі або 3
для 1 на основі
Анекдот
Відповідь Айверсон був ++ / ( M = ⍳ ¹ ⨢ ⍳ ¹) // М , яка НЕ є ні дійсним в Айверсон нотації , як це визначено в мовою програмування , ні в тому, що в кінцевому підсумку став APL. У позначеннях Айверсон, було б + / ( М = ⍳ ¹ ( μ ( М )) ⨢ ⍳ ¹ ( ν ( М ))) / М . У перших версіях APL це було +/(,M=(⍳1↑⍴M)∘.+⍳1↓⍴M)/,M
.