Bao bọc tâm trí của tôi xung quanh ký hiệu tiền tố?


10

Tôi đang đọc về LISP.

Tôi hiểu cách ký hiệu tiền tố hoạt động ở một mức độ nhất định, nhưng tôi đã tự hỏi liệu có bất kỳ thủ thuật nào để làm cho nó trực quan.


6
Ngoài thực hành, ý bạn là gì?

RPL người dùng cho đến nay là hương vị yêu thích của tôi về LISP. Nó thậm chí không có dấu ngoặc đơn! vi.wikipedia.org/wiki/RPL_(programming_lingu) Tôi nhớ sử dụng HP 50g của mình :-(
Robbie

Lúc đầu nó có vẻ không trực quan, nhưng bây giờ tôi nghĩ nó thật tuyệt, và tôi hầu như đã đọc xong. Đó thực sự là cách chúng ta nói: "Tổng của ..., sản phẩm của ..." Tuy nhiên, nó đòi hỏi một kiểu đọc khác. Bây giờ bạn chỉ cần áp dụng toán tử cho tất cả các đối số, thay vì đọc chúng trong một dòng.
Đánh dấu C

Có gì sai với ký hiệu tiền tố? Hầu như tất cả các ngôn ngữ đang sử dụng nó. Các cuộc gọi chức năng hầu như luôn luôn là tiền tố.
SK-logic

Không thực sự; "Trực quan" là trực quan vì bạn đã học nó dưới dạng các quy ước toán học trong hơn 20 năm. Vì chỉ có LISP và có thể một vài ngôn ngữ khác sử dụng quy ước này và bạn sẽ vẫn học được ngôn ngữ khác nhiều hơn nữa, nên nó sẽ khó trở nên "trực quan" như nhau. Và chúng ta chỉ nói về những biểu thức đơn giản ở đây (2 + 3 ... bạn muốn thử một lớp lót "nửa trang" như thế nào? :)
Rook

Câu trả lời:


6

Việc đọc nó từ trái sang phải như ngôn ngữ nói với các động từ thích hợp có thể giúp ích. Ví dụ: (3 3) có thể là "thêm ba và hai". Trong trường hợp tổng quát hơn, bạn có thể nói "thực hiện thao tác $ trên toán hạng $". Áp dụng cho cùng một trường hợp: "Thực hiện thao tác thêm trên ba và hai".


Bạn sẽ làm gì với ( = 1 2 )( > 4 2 )
Bánh quy bột gạo

3
Bạn sẽ sử dụng các câu hỏi tu từ. :) Công bằng? (Cái gì?), "1 và 2! (Erm ... Không ...)
Arafangion

@RiceFlour (Này, tôi lớn lên ăn những thứ làm từ bột gạo - Tôi có vấn đề về gluten.) Tôi sẽ đọc "Là một bằng hai?", Hoặc "Sau đây có bằng nhau không?" Các toán tử lớn hơn và nhỏ hơn không quá tự nhiên ở dạng tiền tố, nhưng tôi tự hỏi tần suất chúng được sử dụng trong mã Lisp.
Đánh dấu C

7

Thủ thuật? Để làm gì?

Nó không cảm thấy trực quan cho bạn vì trình phân tích cú pháp tinh thần của bạn chưa quen với nó. Nó sẽ trở nên tốt hơn nếu bạn chỉ sử dụng nó và đọc đi đọc lại.


Tôi thậm chí còn không đọc nhiều của nó, nhưng bây giờ tôi nghĩ rằng đó là tuyệt vời. Dường như não của tôi bắt đầu có cảm giác gần như "xúc giác" về dấu ngoặc đơn. Tôi nghĩ rằng cảm giác sẽ chỉ trở nên quan tâm hơn.
Đánh dấu C

5

Bạn có thể nghĩ về nó như một kiểu gọi hàm:

(operator operand1 operand2 ...)

Không có gì rất đặc biệt về nó. Nếu bạn quá tải toán tử trong C ++ (và nhiều ngôn ngữ khác cho phép), bạn thường phải xác định loại hàm này chính xác theo cách đó:

MyClass operator+(MyClass const& x, MyClass const& y);

Đúng, đây là cách tôi làm điều đó. Nếu bạn lùi lại và xem các lệnh gọi phương thức trong Java, C #, v.v. thì chúng thực sự chỉ là ký hiệu tiền tố với dấu ngoặc đơn ở một vị trí hơi khác: MyMethod (arg1, arg2).
nlawalker

4

Nhiều ngôn ngữ sử dụng kết hợp tiền tố, tiền tố và thậm chí hậu tố.

Lisp chỉ sử dụng tiền tố - theo mặc định. Nếu sin (x) là trực quan từ toán học, thì (sin x) không còn xa nữa. Nếu di chuyển (chó, nhà) là một cuộc gọi thủ tục truyền thống, thì trong Lisp nó chỉ là (di chuyển chó về nhà).

Lisp không tạo ra bất kỳ ngoại lệ nào cho toán học và xử lý +, -, * và những thứ khác như các lệnh gọi hàm thông thường.


2

Khi (cuối cùng) "Mọi thứ là một cuộc gọi chức năng" (hoặc một hình thức đặc biệt hoặc mở rộng vĩ mô, cả hai đều có cú pháp bề mặt của "chức năng gọi"), nó cảm thấy khá tự nhiên.

Vì vậy, đối với (= 1 2)tôi, tôi đọc rằng 'gọi phép so sánh bằng số trên 1 và 2'.

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.