Được trình bày để vinh danh APL như một công cụ tương tác bước sang tuổi 50 trong năm nay
Lý lịch
Ken [Iverson] đã trình bày bài báo Chủ nghĩa hình thức về ngôn ngữ lập trình vào tháng 8 năm 1963 tại một hội nghị làm việc về cấu trúc ngôn ngữ cơ học, Princeton, NJ (Backus, Curry, Dijkstra, Floyd, Iverson, Newell, Perlis, Wilkes). Bài viết cũng ghi lại cuộc thảo luận xảy ra sau buổi thuyết trình, kết thúc bằng một cuộc trao đổi giữa Ken và [Edsger] Dijkstra , trong đó câu trả lời của Ken cho câu hỏi của Dijkstra là một vấn đề.
Thử thách
Làm thế nào bạn đại diện cho một hoạt động phức tạp hơn, ví dụ, tổng của tất cả các phần tử của ma trận M bằng tổng của các chỉ số hàng và cột tương ứng?
Viết một đoạn mã hoặc biểu thức (không cần chương trình hoặc hàm đầy đủ) để tính tổng của từng phần tử trong một ma trận số nguyên đã cho bằng với tổng chỉ số của nó. Hoặc, như FryAmTheEggman đặt nó: đưa ra một ma trận M với các phần tử a ij trả về tổng của mỗi a ij trong đó a ij = i + j.
Bạn có thể giả sử ma trận đã ở trong một vị trí biến hoặc bộ nhớ hoặc bạn có thể lấy nó làm đối số hoặc đầu vào. Bạn có thể sử dụng 0 hoặc 1 chỉ số dựa trên.
Các trường hợp thử nghiệm
0
cho ma trận trống
2
0
cho 0 chỉ số dựa trên hoặc 2
cho 1 dựa trên
1 5 2
9 4 2
5 9 6
2
cho 0 dựa hoặc 10
cho 1 dựa
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
cho 0 dựa hoặc 3
cho 1 dựa
Giai thoại
Câu trả lời của Iverson là ++ / ( M = ⍳ ⨢ ⍳ ¹) // M , không hợp lệ trong Ký hiệu Iverson như được định nghĩa trong Ngôn ngữ lập trình A , cũng không phải là thứ cuối cùng trở thành APL. Trong ký hiệu Iverson, nó đã có + / ( M = ⍳ ¹ ( μ ( M )) ⨢ ⍳ ¹ ( ν ( M ))) / M . Trong các phiên bản đầu tiên của APL, nó đã được +/(,M=(⍳1↑⍴M)∘.+⍳1↓⍴M)/,M
.