2012-11-05 75 views
19

球拍宏是否比Scheme或Common Lisp中的方法具有更高级的功能?我怀疑是这样,特别是关于模块,名称空间和范围等,但我希望简单地了解一下Racket宏可以做些什么,如果有的话,其他Lisp不能做。球拍VS方案宏

此外,Scheme/CL还将阅读器层暴露给开发人员,并且使用它,是不是可以在这些lisps中创建全新的语言(不仅仅是s-expr宏),例如Scribble,您的方式可以在球拍?

换句话说,Racket只是一个围绕“面向语言的编程”的哲学/约定,为此目的使用了方便的语法封装,还是更加根本地扩展了Scheme,使其在技术上不可能在该语言中实现?

非常感谢。

回答

14

两个关键的功能,使“面向语言编程”在拍工作是:

  • 模块系统允许基本语言
  • 方面的规范敏感的宏

第一个子弹基本上是#lang所做的。让模块系统负责设置阅读器和给定模块中的可用绑定,可以轻松使用不同的语言。如果没有这些,使用Scribble或at-exp等语言将会更麻烦。

第二个是,球拍提供覆写投放上下文敏感的宏如#%app#%module-begin,等等,其允许的,比如说定制,模块内或整个模块的每功能应用。这允许例如在整个模块上添加类型检查通过。

这不是功能,有助于在球拍建立语言的详尽清单。如果您有兴趣阅读更多内容,"Languages as Libraries"论文值得一读。

5

Matthew's reply见同样的问题@Scott贴吧后的名单上,有一个更近的概述文件。