我最近一直在使用Clojure,但我仍然不明白哪些功能沒有得到Common Lisp閱讀器宏提供的功能。可以用簡單的詞彙來解釋這一點嗎?Clojure沒有共同的Lisp閱讀器宏有什麼優勢?
回答
簡而言之,閱讀器宏爲您提供了在某些分隔上下文中重新定義編程語言的語法的能力。
例如,您可以使用給定的閱讀器宏來實現正則表達式文本(例如#"pattern"
)。沒有它們,你將被迫正確地轉義傳遞給re-pattern
的字符串文字中的正則表達式。
順便說一句,雖然沒有公開的Clojure API進行修改的讀者,這不是不可能的,因爲在這些職位說明:
一個簡單的例子。 Common Lisp爲矢量#()而不是[]提供了不同的閱讀器語法。但是,通過創建自定義閱讀器宏的功能,您可以擁有一個閱讀器宏,它也可以將Common Lisp中的矢量[2 3 4 5]轉換爲Common Lisp。
由於大多數用戶不會意識到讀者宏的含義,他們很少使用,爲了避免混淆,Rich Hickey決定取消在Clojure中擁有用戶定義讀者宏的能力。然而,Clojure具有預定義的閱讀器宏 - 報價,矢量,正則表達式,地圖等。
Common Lisp中的閱讀器是用戶可擴展的閱讀器宏。 閱讀器負責閱讀s表達式。 S-表達是Lisp的數據類型,如數字,字符串,符號列表,conses之外,結構,數組,字符,外部文本語法...
的讀者是不負責的語法編程語言Lisp - 僅用於s表達式。
因此,從用戶的角度來說,讀者宏的主要目的是擴展或改變s表達式的語法。例如,用戶可以爲各種CLOS類(如URL,...),散列表,特殊標識符,新數字類型添加文本語法...
有時它也用於嵌入其他語言的語法/語法,它們有不同的規則來形成令牌:嵌入式SQL,嵌入式C,中綴表達式,對Objective C的嵌入式調用,嵌入式規則語言,嵌入式XML,嵌入式JSON等等。
另一個用途是允許用戶對s表達式有額外的控制權,讀者實際上讀取。例如條件特徵表達式。
因此,用戶可編程閱讀器宏允許用戶根據上述功能定製閱讀器。可以想象,這對那些想要在數據語法/令牌級別定製語言的用戶很有用,但是它增加了另一層複雜性。
- 1. Clojure#=閱讀器宏
- 2. SVN和Apache - 有沒有什麼優勢?
- 3. 管理Common Lisp中的閱讀器宏
- 4. 調整具有共同優勢的div
- 5. Hibernate NamingStrategy有什麼優勢
- 6. reftype {}有什麼優勢?
- 7. ServletRequestWrapper比過濾器有什麼優勢?
- 8. 使用迭代器有什麼優勢?
- 9. 如何閱讀心理Lisp/Clojure代碼
- 10. 爲什麼這個Clojure Reducers r/fold沒有提供性能優勢?
- 11. 對CRC有沒有優勢?
- 12. 我們使用更多的指針,有沒有什麼優勢?
- 13. 在Lisp(Clojure,Emacs Lisp)中,list和quote有什麼區別?
- 14. 爲什麼Dask沒有閱讀CSV?
- 15. XML閱讀器沒有正確閱讀
- 16. Button上的ImageButton有什麼優勢嗎?
- 17. rsh與Perl的Expect.pm有什麼優勢?
- 18. 沒有ADT開發Android有什麼優勢嗎?
- 19. 在Lisp閱讀器宏中讀取字符串輸入
- 20. 致電CRM系統 - 有什麼優勢?
- 21. Digest :: SHA比Digest :: SHA1有什麼優勢?
- 22. AIDL在android中有什麼優勢?
- 23. solr中mutivalued選項有什麼優勢?
- 24. NodeJS,Express,Nginx和Jade ......有什麼優勢?
- 25. 使用scrapyd有什麼優勢?
- 26. Hudson vs使用shellcript有什麼優勢?
- 27. EF4或LINQ到SQL有什麼優勢?
- 28. RVM在Linux上有什麼優勢?
- 29. git比git-svn有什麼優勢?
- 30. 使用HttpApplication比HttpApplication有什麼優勢?