我正在尝试感受一下迄今为止我还没有使用过的 Lisp 部分。读取宏此刻引起了我的注意。关于他们的信息并不多use看看人们用它们做了什么,既可以获取它们如何工作的例子,也可以了解它们可以解决哪些类型的问题,这将有所帮助。接下来,是否有任何指南可以帮助您了解什么是读取宏的好用和坏用?
S 表达式是 Lisp 数据的 Lisp 语法。 S 表达式是用 READ 函数读取的,而读取宏是 Lisp 扩展读取器的内置方法。这意味着读取宏的最直接用途是实现预定义的数据语法,并为更改或扩展 Lisp 读取 s 表达式的方式提供了可能性。
Lisp 为许多数据类型提供了预定义的外部语法:符号、数字、字符串、数组、字符、conses、列表、结构等等。它允许打印和读回数据对象。
Lisp 缺乏其他几种数据类型的语法——尤其是哈希表和 CLOS 对象。因此,在用户代码中读取宏的第一个用途是扩展读取器,使其能够读取数据结构,例如哈希表、并行向量、新数字类型……基本上开发人员希望有一个外部语法的每种数据类型可以回读。
由于 Lisp 也将 s 表达式用于代码,因此读取宏的第二个用途是扩展 Lisp 程序的表示法。一个典型的例子是使用[和]来编写嵌入式SQL代码。通常的 Lisp 语法看起来很相似,但 [ 和 ] 的使用有助于 SQL 表达式在代码中脱颖而出。另一个例子是使用读取宏为嵌入式编程语言提供标识符,例如 Objective C 常量、消息等。Clozure CL 使用它来表示区分大小写/保留大小写的标识符,并在读取时使用索引查找它们的定义外部可用的标识符。
第三个用途是将不同的语法嵌入到 Lisp 语法中。一个古老的例子是中缀读取宏,它允许嵌入中缀表达式。其他示例包括嵌入的 HTML 或 XML 语法,或其他编程语言语法的嵌入片段。
有时,读取宏用于实现其他(相关)语言,这些语言使用与预定义的 Common Lisp 语法不同的 s 表达式语法。一个例子是Scheme s-表达式的阅读器——它与Common Lisp 略有不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)