我对Macros非常感兴趣,并且刚开始了解它的真正力量。请帮我收集宏系统的一些很好的用法。
到目前为止,我有这些结构:
模式匹配:
安德鲁赖特和布鲁斯杜巴。图案 对于Scheme,1995的匹配
Prolog精神的关系:
Dorai Sitaram。在schelog中编程。 http://www.ccs.neu.edu/home/dorai/schelog/schelog.htmlDaniel P. Friedman,William E. Byrd, 和Oleg Kiselyov。理性的 阴谋家。麻省理工学院出版社,2005年7月
Matthias Felleisen。音译 Prolog进入计划。技术报告 182,印第安纳大学,1985年。
可扩展循环结构:
塞巴斯蒂安·艾格纳。急切的理解 in Scheme:SRFI-42的设计。在 计划与功能研讨会 编程,第13-26页,9月 2005。 Olin Shivers。循环的解剖:a 范围和控制的故事。在 国际功能会议 编程,第2-14页,2005年。
班级系统:
PLT。 PLT MzLib:图书馆手册。 技术报告PLT-TR2006-4-v352, PLT Scheme Inc.,2006。 http://www.plt-scheme.org/techreports/
Eli Barzilay。骗取。 http://www.barzilay.org/Swindle
组件系统:
Ryan Culpepper,Scott Owens,和 马修弗拉特。句法抽象 在组件接口中。在 生成国际会议 编程和组件工程, 第373-388页,2005年
软件合同检查
Matthew Flatt和Matthias Felleisen。 单位:HOT语言的酷模块 在ACM SIGPLAN会议上 程序设计语言设计 实施,第236-248页,1998年
Oscar Waddell和R. Kent Dybvig。 扩展句法范围 抽象。在原则研讨会上 编程语言,页面 203-215,199
分析器生成器
Scott Owens,Matthew Flatt,Olin Shiver和Benjamin McMullan。词法分析器 Scheme中的解析器和解析器生成器。在 计划与功能研讨会 编程,第41-52页,9月 2004。
工程语义工具:
Matthias Felleisen,罗伯特布鲁斯 Findler和Matthew Flatt。语义 使用PLT Redex进行工程设计。 MIT出版社, 2009年8月。
编译器转换的规范:
Dipanwita Sarkar,Oscar Waddell和R. Kent Dybvig。纳米帆布 编译器教育框架。 功能学杂志 编程,15(5):653-667,九月 2005.教育明珠。
新的执行形式
具有可序列化的Servlet 延续格雷格佩蒂约翰,约翰 克莱门茨,乔马歇尔,Shriram Krishnamurthi和Matthias Felleisen。 广义堆栈的延续 检查。在国际 功能编程会议, 第216-227页,2005年。
定理证明系统
塞巴斯蒂安·艾格纳。方案中的热切理解:设计 SRFI-42。 在方案和功能规划研讨会上,第13-26页, 2005年9月。
基本语言与类型的扩展
Sam Tobin-Hochstadt和Matthias Felleisen。设计和 实施打字方案。在 关于编程原理的专题讨论会 语言,第395-406页,2008年。
懒惰
Eli Barzilay和John Clements。 懒惰没有一切困难 工作:结合懒惰和严格 教学语言。在功能上 和声明性编程 教育,第9-13页,2005年。
功能反应性
Gregory H. Cooper和Shriram Krishnamurthi。嵌入动态 数据流以一种按值调用的语言。 在欧洲编程研讨会上, 2006年
参考:
收集答案 0 :(得分:8)
Culpepper& Felleisen,Fortifying Macros,ICFP 2010
Culpepper,Tobin-Hochstadt和Felleisen,高级宏观学和类型计划的实施,计划研讨会2007
Flatt,Findler,Felleisen,课程与课程,混合和特征,APLAS 2006
Herman,Meunier,通过部分评估改进嵌入式语言的静态分析,ICFP 2004
答案 1 :(得分:6)
Shivers,Carlstrom,Gasbichler& Sperber(1994及以后)The Scsh Reference manual。
希尔斯代尔&弗里德曼(2000)Writing Macros in Continuation-Passing Style。有很多很好的例子可以使用宏将迷你语言嵌入到Scheme中。向我介绍了定义隐式引用其参数的宏的技术。查看流程表单,正则表达式和类似awk的迷你语言的使用。 Scsh是我的建议,作为玩宏的起点。
显示如何使用延续传递样式使弱语法规则宏变得强大。提供了大量的例子。
Flatt,Culpepper,Darais& Findler(已提交)Macros that Work Together - Compile-Time Bindings, Partial Expansion, and Definition Contexts。
提供Racket / PLT Scheme中宏方法的概述和语义。不是很多例子,但我认为这篇论文有你想要的东西。
答案 2 :(得分:4)
ReadScheme!请记得查看ReadScheme上的大量参考书目。
http://library.readscheme.org/page3.html
我认为你错过的一个例子是将SQL语法嵌入到Scheme中。 http://repository.readscheme.org/ftp/papers/sw2002/schemeunit-schemeql.pdf
宏也用于编写自动化测试支持。
答案 3 :(得分:3)
不是一个Scheme,而是有点类似于使用宏的Lisp方言:http://www.meta-alternative.net/mbase.html
有宏实现各种模式匹配,列表推导,各种解析器生成器(包括PEG / Packrat实现),嵌入式Prolog,ADT访问者推断(如在Haskell中废弃样板),可扩展语法宏,Hindley-Milner类型系统,类似Scheme的语法宏等等。该功能的一部分可能可能移植到Scheme,其他部分需要具有显式上下文的扩展宏系统。
答案 4 :(得分:2)
我会在列表中添加“Scheme标准库本身”。查看guile发行版中的文件boot-9.scm
。许多最常用的Scheme表单 - case
,and
等 - 在那里被定义为宏。
答案 5 :(得分:0)
这一点并不是特别精确,因为它分布在大量我从未读过的非常古老的出版物上,而是IIRC大量的Common Lisp对象系统和元对象协议*, 可;是;或者最初是用宏构建的......
* 到目前为止构成IMHO的最先进的OO系统编程曾经见过
答案 6 :(得分:0)
Here's一个非常棒的使用方案宏来创建用方案编写的高效机器人系统的例子
答案 7 :(得分:0)
检查我最喜欢的REST API实现之一:Slack api客户端,它不是用Scheme编写的,而是在Racket中。