60得票8回答
使用宏的优秀应用程序和程序集合

我对宏非常感兴趣,刚开始了解其真正的威力。请帮我收集一些宏系统的优秀用法。 目前我有以下结构: 模式匹配: Andrew Wright和Bruce Duba。 Scheme的模式匹配,1995年 类似Prolog风格的关系: Dorai Sitaram。 Schelog编程。h...

30得票6回答
有人能向我解释一下“卫生”这个概念吗(我是一个Scheme程序员)?

那么……我是scheme r6rs的新手,正在学习宏。有人能解释一下什么是“卫生”吗? 提前感谢。

9得票2回答
如何在过程宏生成的代码中创建卫生的标识符?

当编写一个声明式的(macro_rules!)宏时,我们自动获得了宏卫生。在这个例子中,我在宏中声明了一个名为f的变量,并传入一个标识符f,它会成为一个局部变量: macro_rules! decl_example { ($tname:ident, $mname:ident, ($(...

8得票1回答
“datum->syntax”和“syntax #'”在define-syntax体中有什么区别?

测试代码: (define-syntax (test-d stx) #'(begin (define (callme a) (writeln a)))) (define-syntax (test-e stx) (datum->syntax stx...

8得票1回答
一个命名空间为什么会导致LISP中不卫生的宏?

有人声称,在LISP中使用单一命名空间会导致宏不卫生。关于卫生和gensym(生成符号)的比较可以参考以下链接:http://community.schemewiki.org/?hygiene-versus-gensym。 更多相关信息可以参考以下链接:http://www.nhplace....

7得票1回答
在Scheme中,语法对象的确切目的是什么?

我正在尝试用Python编写一个类似Scheme的小语言,以更好地理解Scheme。 问题在于我卡在了语法对象上。我无法实现它们,因为我不太明白它们的作用和工作原理。 为了尝试理解它们,我在DrRacket中玩弄了一下语法对象。 根据我所能找到的信息,评估“#'(+ 2 3)”与评估“'...

7得票3回答
在Racket中定义宏定义的宏?

在Common Lisp中,相对容易创建一个宏定义的宏。例如,下面这个宏: (defmacro abbrev (short long) `(defmacro ,short (&rest args) `(,',long ,@args))) 这是一个定义宏的宏,因为它会...

7得票1回答
在Julia中,宏调用与宏定义环境的区别是什么?

我正在尝试理解Julia元编程文档中有关宏卫生的陈述。该文档声称: Julia的宏展开器通过以下方式解决了这些问题。首先,宏结果中的变量被分类为本地变量或全局变量。如果变量被分配(而不是声明为全局变量)、声明为本地变量或用作函数参数名,则将其视为本地变量。否则,它被视为全局变量。然后将本地变...