Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure中的匿名宏_Clojure_Lisp_Lambda_Language Design_Anonymous - Fatal编程技术网

Clojure中的匿名宏

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

在CommonLisp中,可以执行以下操作

(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表达式。不过,你让我想:如果在引擎盖下,所有的宏都是,听起来你可以将宏视为值,这可以允许许多有趣的应用程序,包括匿名宏、咖喱宏等等。隐马尔可夫模型。。。