59

我对宏非常感兴趣,并且刚刚开始了解它的真正力量。请帮我收集一些宏系统的伟大用法。

到目前为止,我有这些构造:

模式匹配:

安德鲁·赖特和布鲁斯·杜巴。Scheme 的模式匹配,1995

Prolog 精神中的关系:

多莱西塔拉姆。在 schelog 中编程。 http://www.ccs.neu.edu/home/dorai/schelog/schelog.html

Daniel P. Friedman、William E. Byrd 和 Oleg Kiselyov。理性的计划者。麻省理工学院出版社,2005 年 7 月

马蒂亚斯·费莱森。将 Prolog 音译为 Scheme。技术报告 182,印第安纳大学,1985 年。

可扩展循环结构:

塞巴斯蒂安·埃格纳。计划中的渴望理解:SRFI-42 的设计。在 2005 年 9 月的方案和函数式编程研讨会上,第 13-26 页。

奥林瑟瑟发抖。循环的解剖:范围和控制的故事。在函数式编程国际会议上,2005 年第 2-14 页。

班级系统:

血小板。PLT MzLib:库手册。技术报告 PLT-TR2006-4-v352,PLT Scheme Inc.,2006。http: //www.plt-scheme.org/techreports/

伊莱·巴兹莱。骗取。 http://www.barzilay.org/Swindle

组件系统:

瑞恩·卡尔佩珀、斯科特·欧文斯和马修·弗拉特。组件接口中的语法抽象。在生成式编程和组件工程国际会议上,第 373-388 页,2005

软件合同检查

马修·弗拉特和马蒂亚斯·费莱森。单元:HOT 语言的酷模块在 ACM SIGPLAN 编程语言设计和实现会议中,第 236-248 页,1998

Oscar Waddell 和 R. Kent Dybvig。扩展句法抽象的范围。在编程语言原理研讨会上,第 203-215、199 页

解析器生成器

斯科特·欧文斯、马修·弗拉特、奥林·希弗斯和本杰明·麦克马伦。Scheme 中的词法分析器和解析器生成器。在 2004 年 9 月的方案和函数式编程研讨会上,第 41-52 页。

工程语义工具:

马蒂亚斯·费莱森、罗伯特·布鲁斯·芬德勒和马修·弗拉特。使用 PLT Redex 进行语义工程。麻省理工学院出版社,2009 年 8 月。

编译器转换的规范:

Dipanwita Sarkar、Oscar Waddell 和 R. Kent Dybvig。用于编译器教育的 nanopass 框架。函数式编程杂志,15(5):653–667,2005 年 9 月。教育明珠。

新的执行方式

具有可序列化延续的 Servlet Greg Pettyjohn、John Clements、Joe Marshall、Shriram Krishnamurthi 和 Matthias Felleisen。广义堆栈检查的继续。在函数式编程国际会议上,第 216-227 页,2005 年。

定理证明系统

塞巴斯蒂安·埃格纳。计划中的渴望理解:SRFI-42 的设计。在 2005 年 9 月的方案和函数式编程研讨会上,第 13-26 页。

带有类型的基础语言的扩展

Sam Tobin-Hochstadt 和 Matthias Felleisen。类型化方案的设计与实现。在编程语言原理研讨会上,第 395-406 页,2008 年。

懒惰

伊莱·巴兹莱和约翰·克莱门茨。不劳而获的懒惰:结合懒惰和严格的语言进行教学。在教育中的函数式和声明式编程,第 9-13 页,2005 年。

功能反应性

Gregory H. Cooper 和 Shriram Krishnamurthi。在按值调用语言中嵌入动态数据流。在欧洲编程研讨会上,2006


参考:

选自Ryan Culpepper 的论文

4

8 回答 8

9

Culpepper & Felleisen, Fortifying Macros, ICFP 2010

Culpepper、Tobin-Hochstadt 和 Felleisen,高级宏观学和类型化方案的实施,2007 年方案研讨会

Flatt、Findler、Felleisen,具有类、Mixins 和特征的方案,APLAS 2006

Herman, Meunier,通过部分评估改进嵌入式语言的静态分析,ICFP 2004

于 2010-12-29T23:12:48.223 回答
6

Shivers, Carlstrom, Gasbichler & Sperber (1994 & later) Scsh 参考手册

有很多使用宏将迷你语言嵌入到 Scheme 中的好例子。向我介绍了定义隐式引用其参数的宏的技术。看看过程形式、正则表达式和类似 awk 的迷你语言的使用。Scsh 是我推荐使用宏的起点。

Hilsdale & Friedman (2000)以连续传递风格编写宏

展示了如何使用连续传递样式使弱语法规则宏变得强大。举了很多例子。

Flatt、Culpepper、Darais 和 Findler(已提交)协同工作的宏 - 编译时绑定、部分扩展和定义上下文

提供 Racket/PLT 方案中宏方法的概述和语义。没有很多例子,但我认为这篇论文有你正在寻找的东西。

于 2011-02-09T07:00:54.410 回答
4

阅读计划!记得查看 ReadScheme 上的大量参考书目。

http://library.readscheme.org/page3.html

我认为您错过的一个示例是将 SQL 语法嵌入到 Scheme。 http://repository.readscheme.org/ftp/papers/sw2002/schemeunit-schemeql.pdf

宏也用于编写自动化测试的支持。

于 2011-08-10T13:11:53.883 回答
3

不是一个 Scheme,而是有点类似 Lisp 方言,并大量使用了宏:http ://www.meta-alternative.net/mbase.html

有实现各种模式匹配的宏、列表解析、各种解析器生成器(包括 PEG/Packrat 实现)、嵌入式 Prolog、ADT 访问者推断(如在 Haskell 中废弃样板文件)、可扩展语法宏、Hindley-Milner 类型系统、类似方案的语法宏等等。该功能的一部分可以潜在地移植到 Scheme,其他部分需要具有显式上下文的扩展宏系统。

于 2011-02-09T13:07:00.713 回答
2

我会将“Scheme 标准库本身”添加到列表中。查看boot-9.scmguile 发行版中的文件。许多最常用的 Scheme 形式 - caseand等 - 在那里定义为宏。

于 2012-03-21T18:13:20.073 回答
1

这是一个非常棒的使用方案宏来创建用方案编写的高效机器人系统的示例

于 2014-11-25T16:59:28.807 回答
0

这并不是特别精确,因为它分布在大量我从未阅读过的非常古老的出版物中,但是 IIRC 大块 Common Lisp 对象系统和元对象协议*,可以是; 是; 或者最初是用宏构建的......

*恕我直言,这是迄今为止最先进的 OO 系统编程

于 2011-02-09T06:40:30.480 回答
0

查看我最喜欢的 REST API 实现之一:Slack api 客户端,它不是用 Scheme 编写的,而是用 Racket 编写的。

八角/球拍松弛API

于 2017-06-07T21:33:19.553 回答