普通lisp阅读器宏具有Clojure没有的优势?

| 我最近一直在大量使用Clojure,但是我仍然不明白普通的Lisp阅读器宏所不能提供的功能。可以简单地向我解释一下吗?     
已邀请:
简而言之,阅读器宏使您能够在某些分隔的上下文中重新定义编程语言的语法。 例如,您可以根据阅读器宏自己实现正则表达式文字(例如
#\"pattern\"
)。没有它们,您将不得不正确地传递给传递给
re-pattern
的字符串文字中的正则表达式。 顺便说一句,虽然没有公共的Clojure API用于修改阅读器,但并非没有可能,如这些帖子所示: http://briancarper.net/blog/449/clojure-reader-macros http://fulldisclojure.blogspot.com/2009/12/how-to-write-clojure-reader-macro.html     
一个简单的例子。 Common Lisp对于矢量#()而非[]具有不同的阅读器语法。但是,通过创建自定义阅读器宏的功能,您还可以拥有一个将[2 3 4 5]转换为Common Lisp中的向量的阅读器宏。 由于大多数用户都不知道读取器宏的含义,因此很少使用它们,并且为避免混淆,Rich Hickey决定取消在Clojure中使用用户定义的读取器宏的功能。 Clojure具有预定义的阅读器宏-报价,向量,正则表达式,地图等     
在Common Lisp中,阅读器可通过阅读器宏进行用户扩展。读者负责阅读s表达式。 S表达式是Lisp数据类型的外部文本语法,例如数字,字符串,符号,列表,约束,结构,数组,字符,... 读者不对编程语言Lisp的语法负责,仅对s表达式负责。 因此,从用户的角度出发,阅读器宏的主要目的是扩展或更改s表达式的语法。例如,用户可以为各种CLOS类(如URL,...),哈希表,特殊标识符,新数字类型,...添加文本语法。 有时,它也可用于嵌入其他语言/语法的语法,这些语言具有不同的规则来形成令牌:嵌入式SQL,嵌入式C,中缀表达式,对Objective C的嵌入式调用,嵌入式规则语言,嵌入式XML,嵌入式JSON等。 另一个用途是允许用户对读者实际阅读的s表达式具有其他控制。例如条件要素表达式。 因此,用户可编程的读取器宏允许用户针对上述功能自定义读取器。可以想象,这对于想要在数据语法/令牌级别上自定义语言的用户很有用,但又增加了另一层复杂性。     

要回复问题请先登录注册