Clojure中的匿名宏
在CommonLisp中,可以执行以下操作Clojure中的匿名宏,clojure,lisp,lambda,language-design,anonymous,Clojure,Lisp,Lambda,Language Design,Anonymous,在CommonLisp中,可以执行以下操作 (macro lambda (x) (list (quote car) (list (quote cdr) x))) 在Clojure中,这似乎是不可能的(匿名宏) 这是真的吗 为什么没有提到这个 在clojure.contrib.macro utils中有一些macrolet(或其他东西)。然而,我觉得它闻起来有点像黑客。包含在clojure.core中的内容在TODO雷达上,但目前没有高优先级 编辑:另请参见此处。我的理解是(从阅读和)Cloju
(macro lambda (x) (list (quote car) (list (quote cdr) x)))
在Clojure中,这似乎是不可能的(匿名宏)
在
clojure.contrib.macro utils
中有一些macrolet
(或其他东西)。然而,我觉得它闻起来有点像黑客。包含在clojure.core中的内容在TODO雷达上,但目前没有高优先级
编辑:另请参见此处。我的理解是(从阅读和)Clojure当前(从1.2版开始)仅支持使用defmacro定义的命名宏
但是,您可能会滥用Clojure的内部结构,通过直接调用某个匿名变量上的Java函数Var.setMacro()来获取某种匿名宏。这就是defmacro在幕后构造宏的用途
e、 g.你可以做:
(def macro-var (var (fn [...] ...)))
(.setMacro macro-var)
Clojure阅读器随后将宏var中包含的var解释为宏。但是,您必须弄清楚如何正确定义所有内容,并且这些内容可能会在Clojure的未来版本中全部中断
Clojure 1.3(目前为alpha版本,但已完全投入使用)带来了各种其他增强功能,例如符号宏,因此可能也值得一看。我不想回答,因为我不是一个普通的Lisp人,我的Clojure不够好,无法发表评论。我很好奇这有什么用。是否计划将其传递给高阶宏?ANSI Common Lisp中未定义宏。它从何而来?也许这对Clojure 1.2有效,但Clojure的更新版本[似乎]不支持匿名var。
var
特殊形式要求符号作为其唯一参数,而不是任意Clojure表达式。不过,你让我想:如果在引擎盖下,所有的宏都是,听起来你可以将宏视为值,这可以允许许多有趣的应用程序,包括匿名宏、咖喱宏等等。隐马尔可夫模型。。。