Gần đây tôi đã sử dụng Clojure rất nhiều nhưng tôi vẫn không hiểu chức năng nào tôi không nhận được các macro đọc phổ biến đó cung cấp. Có thể giải thích điều này với tôi trong điều kiện đơn giản?Các macro đọc phổ biến nào có lợi thế mà Clojure không có?
Trả lời
Trong ngắn hạn, macro đọc cung cấp cho bạn khả năng xác định lại cú pháp của ngôn ngữ lập trình trong một số ngữ cảnh được phân cách.
Ví dụ: bạn có thể triển khai các cụm từ biểu thức chính quy (ví dụ: #"pattern"
) mình đã cung cấp macro đọc. Nếu không có chúng, bạn sẽ bị buộc phải thoát khỏi các biểu thức chính quy trong các chuỗi ký tự được chuyển đến re-pattern
.
BTW, trong khi không có API Clojure nào cho việc thay đổi người đọc, nó không phải là không thể, như minh họa trong các bài:
Ví dụ đơn giản. Lisp phổ biến có cú pháp trình đọc khác nhau cho vectơ #() thay vì []. Nhưng với khả năng tạo macro trình đọc tùy chỉnh, bạn có thể có macro trình đọc để traslates [2 3 4 5] đến một vectơ trong Common Lisp. Vì hầu hết người dùng sẽ không nhận thức được ý nghĩa của các macro đầu đọc đã tạo nên chúng hiếm khi được sử dụng và để tránh nhầm lẫn, Rich Hickey quyết định loại bỏ khả năng có macro đọc được người dùng định nghĩa trong Clojure. Tuy nhiên, Clojure đã xác định trước macro đọc - trích dẫn, vectơ, regex, bản đồ, v.v.
Trong Common Lisp các độc giả là người dùng có thể mở rộng với macro đọc. Trình đọc chịu trách nhiệm đọc biểu thức s. S-biểu là một cú pháp văn bản bên ngoài với nhiều loại dữ liệu Lisp của như số, chuỗi, biểu tượng, danh sách, conses, vật kiến trúc, mảng, nhân vật, ...
Các đọc không chịu trách nhiệm về cú pháp của ngôn ngữ lập trình Lisp - chỉ dành cho biểu thức s.
Vì vậy, mục đích chính, từ điểm của người dùng, cho macro đọc là mở rộng hoặc thay đổi cú pháp của biểu thức s. Ví dụ: người dùng có thể thêm cú pháp văn bản cho các lớp CLOS khác nhau (như URL, ...), bảng băm, số nhận dạng đặc biệt, loại số mới, ...
Đôi khi nó cũng được sử dụng để nhúng cú pháp của các ngôn ngữ khác/cú pháp, có các quy tắc khác nhau để tạo mã thông báo: nhúng SQL, nhúng C, biểu thức infix, các cuộc gọi nhúng vào Objective C, các ngôn ngữ quy tắc nhúng, XML nhúng, JSON nhúng và hơn thế nữa.
Một cách sử dụng khác là cho phép người dùng có quyền kiểm soát bổ sung đối với các biểu thức s, đầu đọc thực sự đọc thực sự đọc. Ví dụ: biểu thức tính năng có điều kiện.
Vì vậy, macro trình đọc người dùng có thể lập trình cho phép người dùng tùy chỉnh trình đọc liên quan đến chức năng được mô tả ở trên. Người ta có thể tưởng tượng rằng điều này rất hữu ích cho những người dùng đó, những người muốn tùy chỉnh ngôn ngữ ở cấp dữ liệu-cú pháp/mã thông báo, nhưng nó thêm một lớp phức tạp khác.
- 1. Clojure # = macro đọc
- 2. Tại sao không đọc phần mở rộng macro phổ biến để chạy (đọc)?
- 3. Macro Clojure khác với macro C như thế nào?
- 4. Macro C có thể chứa các biến tạm thời không?
- 5. Đọc tên phổ biến từ tệp .pem
- 6. Macro phổ biến để xác định hệ thống có nguồn gốc UNIX? (Linux, OSX, BSD, ...)
- 7. Kéo để làm mới trong Android mà không có thư viện phổ biến
- 8. Các biến lười biếng có tồn tại trong Clojure không?
- 9. Làm tổ số # /% trong các macro clojure
- 10. Có lợi thế nào khi tách các lớp iPhone và iPad trên ứng dụng Universal không?
- 11. Hợp nhất hai khung dữ liệu trong R có các mẫu phổ biến và không phổ biến
- 12. Macro Condj Clojure-New?
- 13. Làm thế nào để tạo các biến Excel VBA có sẵn cho nhiều macro?
- 14. Dữ liệu Bloomberg không phổ biến cho đến khi macro Excel VBA kết thúc
- 15. Macro đọc vợt
- 16. Chơi Json: Biến đổi một Đọc [T] thành Đọc [Seq [T]] mà không có hàm ý
- 17. Làm thế nào để tránh macro ẩn trong Clojure?
- 18. Đọc Danh bạ mà không có quyền?
- 19. mở rộng Macro cho các macro với đối số so với các biến có cùng tên
- 20. Khi nào sử dụng các biến cá thể có lợi thế hơn việc sử dụng let()?
- 21. Có thư viện C phổ biến để đọc các cặp tên/giá trị từ một tệp không?
- 22. Thành ngữ lisp phổ biến - có cách nào tốt hơn không?
- 23. Biến thành viên tĩnh có phổ biến cho tất cả các C# chung instantiations không?
- 24. Macro lớn C. Lợi ích là gì?
- 25. Hỗ trợ C99 có thực sự vẫn chưa phổ biến?
- 26. BLToolkit orm nào không phổ biến hơn?
- 27. Học Clojure mà không có Kiến thức Java
- 28. cách thành ngữ để thay thế (null x) chức năng từ lisp phổ biến trong clojure
- 29. Có các macro biến đổi toàn bộ chương trình trong Lisp hoặc Lược đồ không?
- 30. Có một trang web để tìm kiếm các hàm phổ biến, đã viết không?