问题标签 [syntax-rules]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
5920 浏览

macros - 学习 Scheme 宏的来源:define-syntax 和 syntax-rules

我已经阅读了JRM 的 Syntax-rules Primer for the Merely Eccentric,它帮助我理解了语法规则以及它与 common-lisp 的定义宏有何不同。语法规则只是在定义语法中实现语法转换器的一种方式。

我正在寻找两件事,第一是更多示例和语法规则的解释,第二是学习使用定义语法的其他方式的良好资源。你推荐什么资源?

0 投票
9 回答
1348 浏览

python - 我怎样才能接近实现?:来自 Python 中的 C++/C#?

在 C# 中,我可以轻松编写以下内容:

有没有一种在 Python 中做同样事情的快速方法,或者我是否坚持使用“if”语句?

0 投票
3 回答
11351 浏览

python - “|”是什么意思 Python中的符号是什么意思?

这个问题最初问(错误地)什么是“|” 在 Python 中的意思是,当实际问题是关于 Django 时。我想保留三联画对这个问题的精彩回答。

0 投票
5 回答
3960 浏览

emacs - Emacs Lisp 语法高亮

我想为 Emacs 编写一个语法高亮扩展,但我在谷歌上搜索“emacs 语法高亮教程”的变体都失败了。如何开始学习如何编写 Emacs 荧光笔?有什么好的资源来学习如何做这些事情?

0 投票
1 回答
355 浏览

functional-programming - 请在 Scheme 中重构我的宏

我正在学习卫生,我尝试在 Scheme 中创建一个简单的 for 循环。我想支持三种结构,如下例所示

我还想支持带有这样的过滤器的循环:

我有这个,但我可以看到很多重复。请帮我删除冗余。

0 投票
1 回答
209 浏览

macros - 语法规则中如何使用向量模式?

我一直在写 Common Lisp 宏,所以 Scheme 的 R5Rs 宏对我来说有点不自然。我我明白了,除了我不明白如何在语法规则中使用向量模式:

我看不到如何使用需要将其参数写为向量的宏:

是否有某种使用这些模式的技术?

谢谢!

0 投票
1 回答
461 浏览

macros - 使用语法规则在 Scheme 中进行隐式柯里化?

Jeffrey Meunier这里有一个隐式的 Curry 宏,它使用 defmacro。我想知道是否有人用语法规则写过这个?

0 投票
1 回答
147 浏览

macros - 语法规则不完全卫生?

我知道这syntax-rules是一个卫生的宏观系统,但我不明白为什么会这样:

现在,如果我在定义宏not 重新定义,则(nand #f #t)返回#t. 为什么,如果宏观系统应该是卫生的?

0 投票
2 回答
133 浏览

clojure - clojure 宏如何解析特殊符号?

当我用 Clojure 重新实现一个用 Scheme 编写的宏时,我遇到了麻烦。该宏尝试将测试数据对加载到all-testsvar 中以供以后使用。

因为宏的参数是可变长度的,并且包含特殊的未定义符号,即=>,我根本不知道如何像 Scheme 语法规则那样解析它。

方案版本:

我目前不成功的 Clojure 版本:

Ps:我现在正在println测试我的代码。当它工作时,我会尝试做解析和加载工作。

0 投票
2 回答
479 浏览

macros - 如何控制 Scheme 宏扩展的顺序?

我正在使用 Racket 宏扩展syntax-id-rules,它是其他一些方案实现在名称下提供的identifier-syntax。这些使您可以指定即使定义的标识符不在头部位置也会发生的宏扩展。例如:

将标识符设置proxyhidden. 这是一个无用的示例,但它说明了用法。

我发现自己处于想要一个全局普通宏的情况,我们称之为foo,在某些情况下我想覆盖我使用标识符宏之类的proxy. 也就是说,我希望能够做这样的事情:

但实际上最后一行返回'default,因为foo宏在它之前被扩展proxy

任何想法我可以如何实现这些方面的东西,但proxy标识符宏覆盖默认宏定义foo?我并没有专门致力于上述架构。

补充:这不适用于任何现实世界的使用,而是形式语义理论点演示的一部分。