Các dấu ngoặc vuông và dấu ngoặc nhọn trong Clojure có còn là biểu thức S không?


11

Tôi đang cố gắng học Lisp và xem xét tất cả các Lisps ngoài kia và sự khác biệt của chúng.

Tôi thấy rằng trong một số triển khai của Đề án, bạn có thể sử dụng dấu ngoặc vuông có thể thay thế cho dấu ngoặc tròn để dễ đọc, vì vậy chúng được xử lý như nhau, tôi cho rằng chúng vẫn chỉ là biểu thức S giống như mọi thứ khác.

Tuy nhiên, trong Clojure tôi thấy rằng dấu ngoặc vuông và dấu ngoặc nhọn được sử dụng để biểu diễn các loại dữ liệu khác nhau như vectơ, v.v. Đây có còn là các biểu thức S hợp lệ hay chúng phải được coi là các nguyên tử? Điều này không "phá vỡ" toàn bộ khái niệm về biểu thức S, do đó làm cho Clojure trở thành một "không trong sạch" Lisp?

Câu trả lời:


10

Ký hiệu nghĩa đen cho vectơ và bản đồ (nghĩa là dấu ngoặc vuông và dấu ngoặc nhọn) chỉ là đường thời gian đọc và bất cứ điều gì bạn có thể biểu thị bằng ký hiệu đó cũng có thể được biểu thị bằng biểu thức S. Kết quả là, không có sự mất năng lượng hoặc đồng âm, và các macro đọc (mà tôi hiểu thậm chí còn mạnh hơn) có sẵn trong một số lisps.

Ngẫu nhiên, lưu ý rằng Clojure hiện cung cấp một cơ chế để tạo ra các chữ "được gắn thẻ" tùy chỉnh, giống như các chữ khác, được chuyển thành biểu thức S trước khi chúng được biên dịch và giải thích.


1
Mmm, câu trả lời của bạn khiến tôi nghĩ rằng tôi hiểu ít hơn tôi nghĩ tôi đã hiểu về Lisp. Vì vậy, những gì bạn đang nói (tôi nghĩ) là dấu ngoặc vuông và xoăn trên thực tế không phải là biểu thức S. Tôi nghĩ rằng toàn bộ ý tưởng với đầu vào Lisp là mọi thứ đều là biểu thức S. Có vẻ như tôi cần phải đào thêm một chút nữa trước khi quay lại để đọc lại câu trả lời của bạn. Cảm ơn!
mydoghasworms

Điều đó đúng - chúng không phải là biểu thức S. Cú pháp Lisp bắt đầu bằng biểu thức S, trong đó mọi thứ có thể diễn đạt bằng ngôn ngữ đều có thể được biểu thị bằng biểu thức S. Nhưng cú pháp Lisp không kết thúc ở đó: nhiều trình biên dịch Lisp có pha đọc-macro rõ ràng, trong đó các mẫu đặc biệt trong mã nguồn được chuyển thành biểu thức S. Điều này cho phép các tác giả ngôn ngữ cung cấp cho các lập trình viên cú pháp thân thiện với con người. Điều quan trọng cần lưu ý là bởi vì bất kỳ thứ gì được biểu thị bằng những chữ đặc biệt này cũng có thể được biểu thị bằng biểu thức S, không có lợi ích nào của tính đồng âm bị mất.
tvachon

3

Biểu thức S là một biểu diễn văn bản cho dữ liệu. Số, ký hiệu, ô khuyết điểm, danh sách, chuỗi, ... Common Lisp cũng có các biểu diễn văn bản cho mảng, vectơ, nhiều loại số, ký tự, ... Common Lisp cũng cung cấp trình đọc mở rộng cho người dùng, để người dùng có thể thêm biểu diễn văn bản nhiều hơn cho các loại dữ liệu. Đôi khi cơ chế này cũng được sử dụng để thay đổi cú pháp của ngôn ngữ lập trình Lisp (ví dụ để hỗ trợ các biểu thức hoặc câu lệnh từ các ngôn ngữ lập trình khác).

Do đó, nếu một phương ngữ Lisp cung cấp các biểu diễn văn bản cho các kiểu dữ liệu bổ sung, thì điều này rất phù hợp với ý tưởng về biểu thức s.

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.