可以使用Lisp的宏的示例

Dim*_* C. 31 lisp macros

我听说Lisp的宏系统非常强大.但是,我发现很难找到一些可用于它们的实际例子; 没有它们很难实现的事情.

谁能举一些例子?

Rai*_*wig 42

源代码转换.所有种类.例子:

  • 新控制语句:您需要WHILE语句吗?你的语言没有?为什么等待仁慈的独裁者可能在明年加一个.自己写吧.五分钟后.

  • 更短的代码:你需要二十个几乎看起来相同的类声明 - 只有有限数量的地方是不同的.编写一个宏差异表格,将差异作为参数,并为您生成源代码.想稍后改变吗?在一个地方更改宏.

  • 源树中的替换:您想要将代码添加到源树中吗?变量真的应该是函数调用吗?围绕"遍历"源代码的代码包裹宏,并更改找到变量的位置.

  • Postfix语法:您想以postfix形式编写代码吗?使用宏将代码重写为普通形式(Lisp中的前缀).

  • 编译时效果:您需要在编译器环境中运行一些代码以通知开发环境定义?宏可以生成在编译时运行的代码.

  • 编译时的代码简化/优化:您想在编译时简化一些代码吗?使用执行简化的宏 - 这样您就可以根据源表单将工作从运行时转移到编译时.

  • 从描述/配置生成代码:您需要编写复杂的类组合.例如,你的窗口有一个类,子窗格有类,窗格之间有空间限制,你有一个命令循环,一个菜单和一大堆其他东西.编写一个宏来捕获窗口及其组件的描述,并根据描述创建驱动应用程序的类和命令.

  • 语法改进:有些语言语法看起来不太方便吗?编写一个宏,使您(应用程序编写者)更方便.

  • 特定于域的语言:您需要一种更接近应用程序域的语言吗?使用一堆宏创建必要的语言表单.

元语言抽象

基本思想:语言层面上的一切(新形式,新语法,表单转换,简化,IDE支持......)现在可以由开发人员逐个编程 - 没有单独的宏处理阶段.


Ken*_*Ken 9

选择任何" 代码生成工具 ".阅读他们的例子.这就是它能做的.

除了您不需要使用不同的编程语言之外,将任何宏扩展代码放在使用宏的位置,运行单独的命令来构建,或者在硬盘上放置额外的文本文件,这些文件只对您的编译器有价值.

例如,我相信阅读Cog示例应该足以让任何Lisp程序员哭泣.


Aus*_*nen 2

只是一个猜测——领域特定语言。