我有一些 s 表达式(let ((whatever (foo (bar 4) (bar 5)))) ...)
(作为 的结果(read "(whatever (foo (bar 4) (bar 5)))")
。现在我想用一个自定义宏来转换它,例如扩展为foo
宏表达式。
将宏应用于给定 S 表达式的机制是什么?请注意,我不希望这种替换发生在 .scm 文件的编译时,而是在读取 s 表达式之后发生。
此外,我不想使用 eval,因为这些 S-Expressions 不是 Scheme 代码。我不想let
在给定的 s 表达式中扩展语句,只有foo
.
基本上,我认为 Scheme 将包含一个足够灵活的树转换框架,使我能够随时使用特定的宏来操作任何类型的 S 表达式。然而,与此同时,我了解到 Scheme 的宏不是一流的对象,不能以这种方式使用,正如 Sylwester 所暗示的那样。