Racket中的一些宏术语

7 scheme racket

很长一段时间我对这些术语感到困惑,认为最好问一下它们究竟是什么意思:

A.语法.B.语法价值.C.语法对象.Ds-expression E.datum(在syntax-> datum中)

  • s表达式和符号之间有什么区别?
  • s-expression和datum有什么区别?
  • s-expression与(语法,语法值和语法对象)有什么区别?
  • 将理解用于解释的代码示例.

Eli*_*lay 6

"语法"是一种用于在Racket中表示源代码的类型,它是S-expression的包装器(有关详细信息,请参阅最近的博客文章)."语法值"和"语法对象"都是这个的同义词,而ni是mzscheme语言函数的古代,它处理syntax-value名称中使用的语法.这些天我们更频繁地使用"语法",而对于复数形式,我们使用"语法".

"S表达式"是可以在代码中键入的原始数据(符号,数字,字符串,布尔值等等 - 在Racket中您还可以包括其他类型),或者这些内容的列表.因此,S表达式是在边缘处由这些原始类型构成的列表的任何嵌套结构.有时这也包括向量(因为它们可以使用#(...)语法输入)但更常见的是它们被排除在外.

最后,"datum"是S表达式的另一个名称,有时候当您想要引用它是一段具有输入表示的数据时.您可以看到R5RS如何引入它:<Datum>可以是Scheme对象的任何外部表示[...].此表示法用于在Scheme代码中包含文字常量.

至于你的问题:

  • s表达式和符号之间有什么区别?

    符号是S表达式,S表达式可以包含符号.

  • s-expression和datum有什么区别?

    真的没什么.(虽然可能存在一些微妙的意图差异.)

  • s-expression与(语法,语法值和语法对象)有什么区别?

    它们是球拍中宏使用的程序语法的表示 - 它们包含 S表达式,但它们添加了源位置信息,词汇上下文,语法属性和证书.请参阅该博客文章以获得快速介绍.