Tại sao ngôn ngữ lập trình bắt đầu sử dụng = để gán?


13

Trong hầu hết các sách thuật toán ban đầu, <-được gọi là bài tập và =được gọi là so sánh. Nhưng ngày nay, các ngôn ngữ duy nhất không sử dụng =để gán là Pascal ( :=) và các ngôn ngữ đồ chơi như COOL . Điều gì đã khiến các ngôn ngữ lập trình hiện đại thay đổi =thành sự gán nghĩa thay vì ý nghĩa toán học của sự bình đẳng?


8
Đừng để tôi bắt đầu vào ===...
Deer Hunter

1
vẫn còn phổ biến trong công việc thuật toán; đó là một trong ba ký hiệu phổ biến cho phép gán khi viết thuật toán (các thuật toán khác :==). Chỉ vì tất cả các lập trình viên sử dụng =không có nghĩa là tất cả các nhà toán học đều bỏ .
cpast 17/03/2015

@DeerHunter ===vẫn ổn.
Darth Egregious

1
Tôi có một nữ sinh trung học hú: "Làm thế nào x có thể bằng x cộng một?" trong một giới thiệu tôi đã dạy. Đó là sự kỳ lạ cơ bản của máy tính: các biến không tồn tại trong tự nhiên, chúng không giống bất kỳ thứ gì khác trong vũ trụ.

1
User251748: Ví của tôi là một biến trong thế giới thực, chứa nhiều bộ tiền xu, tiền giấy ngân hàng và các mẩu giấy thỉnh thoảng.
gnasher729

Câu trả lời:


14

Theo Wikipedia , việc sử dụng các đẳng thức cho việc chuyển nhượng bắt nguồn từ Superplan ngôn ngữ của Heinz Rutishauser, được thiết kế từ năm 1949 đến 1951 và được Fortran đặc biệt phổ biến:

Một ví dụ nổi tiếng cho một ý tưởng tồi là sự lựa chọn dấu bằng để biểu thị sự phân công. Nó quay trở lại Fortran vào năm 1957 và đã bị sao chép một cách mù quáng bởi quân đội của các nhà thiết kế ngôn ngữ. Tại sao nó là một ý tưởng tồi? Bởi vì nó lật đổ một truyền thống thế kỷ cũ để cho phép = = biểu thị sự so sánh cho sự bình đẳng, một vị ngữ là đúng hoặc sai. Nhưng Fortran làm cho nó có nghĩa là sự phân công, thực thi bình đẳng. Trong trường hợp này, các toán hạng nằm trên không bằng nhau: Toán hạng bên trái (một biến) sẽ được tạo bằng với toán hạng bên phải (một biểu thức). x = y không có nghĩa tương tự như y = x.

Chúc mừng sinh nhật, ý tưởng hay, qua kính nhìn

Konrad Zuse cũng đã sử dụng dấu bằng cho Plankalkul , thứ đã truyền cảm hứng cho Superplan của Rutishauser, mặc dù một trình biên dịch không bao giờ được nghĩ ra cho nó. Tại sao anh ta chọn dấu bằng? Tôi đoán bạn phải hỏi anh ta.


4
Chà, chắc chắn đã có những ý tưởng tồi tệ hơn. Xét cho cùng, các văn bản toán học sử dụng =cả hai như một vị ngữ và để xác định các biến, ví dụ như trong Gọi Let x = 4. Khi đó (x - y) bằng 0 nếu y = 4. Điều này hoạt động bởi vì ký hiệu toán học nên được hiểu theo cách khai báo hơn là bắt buộc. Các ngôn ngữ lập trình chức năng (ví dụ: họ ML) mặc định là các biến không biến đổi và do đó có thể tiếp tục sử dụng =trong vai trò kép của nó mà không gặp vấn đề gì. Hay chính xác hơn, =là cả một toán tử và một phần của letcú pháp.
amon

2
@amon: Tôi không đồng ý về ý nghĩa kép trong toán học. "Đặt 4 = x" có giá trị như "Đặt x = 4".
ĐẾN TỪ

4
@COMEFROM "Đặt 4 = x" không tự nhiên như câu lệnh INTERCAL mà bạn lấy tên người dùng của mình. Khi "x" chưa bao giờ được đề cập trước đó, "Đặt x = {Something}" hoặc "Đặt x là một {widget}" giới thiệu một biến ngoài việc chỉ định giá trị của nó và điều này đặt biến đầu tiên theo quy ước. Điều đó chính xác bởi vì, ít nhất là về mặt trực giác, đây là một điều khác với việc chỉ nêu "giá trị bằng ...".

3
@delnan "Đặt x = 4" chỉ là viết tắt của "Đặt x ∈ và x = 4". Bối cảnh giới thiệu biến mới và =sau đó chỉ là một vị ngữ, giống như bất kỳ nơi nào khác nó được sử dụng. Lưu ý rằng tùy thuộc vào ngữ cảnh, "Đặt x = 4" cũng có thể có nghĩa là "Đặt x ∈ và x = 4".
Doval 17/03/2015

2
@RobertHarvey Chúng ta đang nói về viết toán học, không phải lập trình C. ĐẾN TỪ: Tôi thừa nhận rằng nó không rõ ràng như tôi đã nói trước đây, nhưng vì văn xuôi toán học dựa trên các quy ước và không có đặc điểm nào có thể được luật sư cho phép "let 4 = x", không, tuyên bố là không chỉ có giá trị như "let x = 4". Ít nhất, nó gây nhầm lẫn cho độc giả và do đó thất bại mục đích chính của văn xuôi .

7

Nhưng khi tôi học toán ở trường "hãy x = 123"

là phrasing phổ biến. Các phiên bản đầu tiên của Basic nhấn mạnh vào từ khóa "cho phép" trước bằng nhau. Vì vậy, về cơ bản các nhọt của nó được thực hiện để "cho phép" được hiểu.

Một trình điều khiển chính thường không được xem xét nhưng rất quan trọng tại thời điểm nó thực sự đã gõ vào cái gì.

Có hai thiết bị đầu vào khả thi,

  • "Teletype" theo đó bạn có thể sử dụng một máy teletype tiêu chuẩn để đục các lỗ nhỏ trên một dải ruy băng giấy mà máy tính có thể đọc được. Điều này không tệ lắm vì nó hỗ trợ aplph.us tiêu chuẩn ở chữ hoa và chữ thường cộng với hầu hết các ký tự ở hàng trên cùng của bàn phím của bạn.
  • Thẻ đục lỗ - có rất nhiều máy đục lỗ treo xung quanh vì việc sử dụng máy sắp xếp, máy tính bảng và máy in là phổ biến trong các tập đoàn lớn. Chúng hỗ trợ một bộ ký tự giới hạn ery đặt chữ hoa chữ thường và một số ký tự "đặc biệt" giới hạn.

Teletypes có xu hướng được sử dụng trong các cửa hàng học thuật và quân sự, thẻ đục lỗ trong các cửa hàng thương mại hơn. Do đó, các ngôn ngữ hàn lâm như Pascal hỗ trợ các định danh chữ thường và các ký hiệu "hợp lý" như ": =" để gán. Các ngôn ngữ nhắm đến đối tượng thương mại nhiều hơn giả định rằng thẻ đục lỗ sẽ là hình thức nhập liệu chính do đó các ngôn ngữ chữ hoa như FORTRAN và COBOL có hỗ trợ hạn chế cho các ký tự ":;> <" không có trên một phím bấm tiêu chuẩn.

Ngẫu nhiên, không có sự mơ hồ về "=" được sử dụng để gán trong FORTRAN sớm khi so sánh được thực hiện bằng cách sử dụng ".LT.", ".LE.", ".EQ.", ".GE." và ".GT." cú pháp.


Tôi thấy let x = 123tương tự như assert(x == 123)bất kỳ loại chuyển nhượng, mặc dù.
AKHolland

1
PS Nếu bạn đang nhận được pedantic thì cú pháp "MOVE" của COBOL là mô tả chính xác nhất về những gì máy tính đang thực sự làm. Mặc dù "SAO CHÉP" sẽ còn chính xác hơn nữa.
James Anderson

@AKHolland cho các giá trị lớn là 123.

Kể từ khi C ++ phát minh ra các nhà xây dựng di chuyển, COBOLs SẠCH âm thanh nghe có vẻ lạ hơn.
gnasher729

Tôi luôn nghĩ rằng LET nên vẫn là bắt buộc trong BASIC, vì nó sẽ làm cho việc chuyển nhượng đứng ngoài kiểm tra công bằng. Sắp xếp tốc ký của COBOL-ish. Vấn đề là, điều đó sẽ chiếm một mã thông báo khác trong nguồn, một byte quý giá khác trong PC của teeeeny nhỏ bé thời đó. Vì vậy, họ đã bỏ nó.
Chuck Adams
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.