Làm thế nào các tùy chỉnh sử dụng dấu ngoặc vuông cho các phần tử mảng phát triển?


11

Nhiều ngôn ngữ lập trình sử dụng cú pháp a[i]để chỉ iphần tử thứ của một mảng, chuỗi hoặc vectơ a- cụ thể là C và Pascal (từ cuối những năm 1960 và đầu những năm 1970) làm điều này. Mặt khác, một số ngôn ngữ trước đó, như Fortran (từ những năm 1950), không sử dụng quy ước này. Ngoài ra, tôi đã nghiên cứu một chút về toán học, và các nhà toán học sử dụng dấu ngoặc vuông cho các khoảng và các chỉ số cho việc đăng ký mảng và ma trận (hoặc dấu ngoặc đơn thông thường nếu mảng được coi là một hàm từ các số nguyên không âm).

Vì vậy, câu hỏi của tôi là: Trường hợp / làm thế nào / trong bối cảnh nào mà dấu ngoặc vuông này cho việc đăng ký mảng phát triển và bởi ai?

Lưu ý: Hoàn toàn không phải là một bản sao của câu hỏi này về việc sử dụng dấu ngoặc nhọn trong C.



@gnat: Làm thế nào đây là một bản dupe của điều đó?
einpoklum

1
Liên quan nhưng không phải là một bản dupe.
Blaster

1
câu trả lời hàng đầu thứ hai ở đó bao gồm lịch sử của dấu ngoặc vuông
gnat

1
@Paul Typo. Ý bạn là xkcd.com/163 (tên miền xkdc được đăng ký tại Trung Quốc)
1201ProgramAlarm

Câu trả lời:


10

Ngôn ngữ tiền thân chính của C và Pascal là Algol . Phiên bản đầu tiên là Algol 58 sử dụng dấu ngoặc vuông để khai báo và tham chiếu mảng.

Lý do mà Algol sử dụng dấu ngoặc vuông thay vì, ví dụ, dấu ngoặc đơn là ba lần:

  1. bởi vì họ có thể Bàn phím ban đầu của IBM, mà Fortran được thiết kế, chỉ có dấu ngoặc đơn. Điều này đã thay đổi theo thời gian Algol được chỉ định.
  2. kinh nghiệm với Fortran đã chỉ ra rằng các lập trình viên thường bị nhầm lẫn với việc sử dụng dấu ngoặc đơn quá mức nên nó được coi là một thay đổi cú pháp quan trọng.
  3. ý định đằng sau Algol là nó sẽ được sử dụng để mô tả các thuật toán để nó gần với ký hiệu toán học tiêu chuẩn hơn.

Lưu ý, không giống như C, sử dụng hầu hết các mảng cho bộ nhớ chỉ mục, Algol cho phép cả hai giới hạn chỉ số trên và dưới được chỉ định. Một lần nữa, điều này phù hợp với mục đích toán học hơn của nó. Thực tế, rất nhiều, Algol là ngôn ngữ thực tế cho mã giả trong nhiều năm.


Nhưng dấu ngoặc vuông có thực sự gần với ký hiệu toán học tiêu chuẩn không? Khi tôi nghiên cứu đối sánh, [x]được sử dụng cho các lớp tương đương, không phải cho các vị trí chỉ thị trong vectơ hoặc ma trận.
einpoklum

2
@einpoklum Nhiều hơn cho các phạm vi trong khai báo hơn các chỉ mục hoặc siêu ký tự trong tài liệu tham khảo. Nhưng, vì họ thực sự không thể thực hiện các đăng ký hoặc siêu ký tự với công nghệ thời đó, họ đã đi theo sự nhất quán trực quan. Và họ không nhắm đến khái niệm toán học theo cách mà APL đã làm. Họ đang nhắm đến việc thể hiện rõ ràng các thuật toán vốn là một nhánh khá hẹp.
Alex

Oh, cũng, dấu ngoặc vuông đã được sử dụng trong khoảng thời gian. Tôi đoán đó là phạm vi trong một mảng, theo một nghĩa nào đó. Ngoài ra - bạn có chắc Algol là nơi tùy chỉnh này bắt đầu không?
einpoklum

@einpoklum Tôi chắc chắn rằng việc sử dụng dấu ngoặc vuông trong C và Pascal đến từ Algol. Các dòng dõi là tài liệu khá tốt. Nếu có một tiền thân của Algol 58 mà các nhà thiết kế đã lấy cú pháp từ đó, thì tôi không biết về nó. Nó không thể đưa ra thời gian nhưng không phải là không thể. Algol 58 không được triển khai trước Algol 60 nên có thể một ngôn ngữ chưa được thực hiện là một nguồn cảm hứng.
Alex

5

Đây là một bài đọc thú vị: https://en.m.wikipedia.org/wiki/Brquet

Sau đây là những quan sát của riêng tôi.

Các nhà thiết kế C đã rất cẩn thận khi áp dụng ý nghĩa của các ký tự và cấu trúc vì chúng đã được sử dụng hàng trăm năm trong ngôn ngữ viết thông thường. Và làm như vậy, họ phải làm việc với tập hợp con khá hạn chế của các ký tự ASCII. Trong ngôn ngữ phương tây, nhiều ký tự nhóm được sử dụng trong văn bản viết nhưng chúng không biến nó thành ASCII.

Trong ngôn ngữ thông thường, ý nghĩa của dấu ngoặc đơn là cung cấp thông tin bên mà không làm gián đoạn thông điệp chính. Điều này có ý nghĩa khi gọi một thủ tục: thông điệp chính là hành động được thực hiện và thông tin phụ là các đối số.

Niềng răng xoăn được sử dụng để nhóm. "Bộ sưu tập các từ này thuộc về nhau, sẽ được đặt tách biệt với phần còn lại". Vì vậy, nó có ý nghĩa để sử dụng chúng cho các khối mã, câu lệnh ghép.

Dấu ngoặc vuông được sử dụng để chèn vào văn bản không phải là một phần của bản gốc, để làm rõ văn bản gốc và cung cấp ngữ cảnh. Hoặc để biểu thị thiếu sót với dấu chấm lửng: [...]. "Cô ấy [nữ hoàng] không thích thú". Trong lập trình máy tính, sẽ có một chút ý nghĩa khi sử dụng dấu ngoặc để lập chỉ mục mảng vì đây là một loại bối cảnh được cung cấp. "Mảng? Mảng nào? Chà, cụ thể là phần tử đó." Nhưng ngay cả khi ý nghĩa ban đầu không bao gồm đầy đủ việc sử dụng trong ngôn ngữ máy tính, vẫn không có quá nhiều tùy chọn khác trong ASCII.

Vì vậy, tôi muốn nói rằng đó là sự kết hợp của nghệ thuật trước đó và những gì có sẵn tại thời điểm đó dẫn đến việc sử dụng dấu ngoặc vuông để lập chỉ mục mảng.

[chỉnh sửa vì bình luận của Alex]

Theo nguồn tin này , ASCII được giới thiệu vào năm 1963 và được chính phủ phê duyệt vào năm 1968. Việc phát triển ngôn ngữ C không bắt đầu cho đến năm 1969, theo wiki này . Vì vậy, có vẻ như ông Ritchie đã để mắt đến tiêu chuẩn mới được hỗ trợ rộng rãi này được gọi là ASCII khi chọn các nhân vật của mình.

Cũng xin xem (các) câu trả lời khác tạo ra một trường hợp cho Algol, "mẹ của nhiều ngôn ngữ", có ảnh hưởng mạnh mẽ.


Tôi nghĩ tôi hiểu những gì bạn nói nhưng ASCII không được mã hóa cho đến gần một thập kỷ sau khi C được thiết kế. Một tác động trực tiếp hơn nhiều là bàn phím của PDP-11 mà C được thiết kế cho. Nó có ý nghĩa để sử dụng các nhân vật mà nó hỗ trợ. Việc sử dụng dấu ngoặc vuông cho mảng được lấy cảm hứng trực tiếp từ Algol thông qua BCPL và B. Tương tự cho Pascal. Wirth đã triển khai Algol-W trước khi thiết kế Pascal.
Alex
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.