【发布时间】:2011-03-28 19:25:35
【问题描述】:
我已经在 node.js 上实现了自己的 Lisp,我可以像这样运行 s-expression:
(断言 (= 3 (+ 1 2))) (def even? (fn [n] (= 0 (bit-and n 1)))) (断言(甚至?4)) (assert (= false (even?5)))现在我想添加宏 - defmacro 函数 - 但这是我卡住的地方。我想知道如何在其他 Lisps 中实现宏系统,但我找不到很多指针(除了 this 和 this)。
我查看了 Clojure 宏系统——我最熟悉的 Lisp——但这似乎太复杂了,我找不到可以轻松应用的其他线索(Clojure 宏最终编译为字节码'不适用于 javascript,我也无法理解 macroexpand1 函数。)
所以我的问题是:给定一个没有宏但有 AST 的 Lisp 实现,如何添加像 Clojure 的宏系统这样的宏系统?这个宏系统可以在 Lisp 中实现,还是需要在宿主语言中实现额外的功能?
补充一点:我还没有实现quote ('),因为我无法弄清楚返回列表中应该包含什么样的值。它是否应该包含 AST 元素或对象,例如 Symbol 和 Keyword(Clojure 就是后者)?
【问题讨论】: