很长一段时间我对这些术语感到困惑,认为最好问一下它们究竟是什么意思:
A.语法.B.语法价值.C.语法对象.Ds-expression E.datum(在syntax-> datum中)
"语法"是一种用于在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表达式,但它们添加了源位置信息,词汇上下文,语法属性和证书.请参阅该博客文章以获得快速介绍.