【问题标题】:Some Macro terms in Racket球拍中的一些宏观术语
【发布时间】:2011-08-02 03:54:48
【问题描述】:

我对这些术语困惑了很长时间,认为最好问问它们到底是什么意思:

A.句法。 B. 语法值。 C. 语法对象。 D.s-expression E.datum (in syntax->datum)

  • s 表达式和符号有什么区别?
  • s-expression 和 datum 有什么区别?
  • s-expression 中的(语法、语法值和语法对象)有什么区别?
  • 用于解释的代码示例将不胜感激。

【问题讨论】:

    标签: scheme racket


    【解决方案1】:

    "Syntax" 是在 Racket 中表示源代码的类型,它是 S 表达式的包装器(有关详细信息,请参阅 recent blog post)。 “语法值”和“语法对象”都是这个的同义词,并且在名称中使用syntax-value 处理语法的mzscheme 语言函数的远古时代。如今,我们更多地只使用“syntax”,而对于复数形式,我们使用“syntaxes”。

    “S 表达式”是可以在代码中输入的原始数据片段(符号、数字、字符串、布尔值等——在 Racket 中,您还可以包含其他类型),或者是这些内容的列表.因此,S 表达式是由这些原始类型构成的列表的任何嵌套结构。有时这也包括向量(因为可以使用#(...) 语法输入它们),但更常见的是它们被忽略了。

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

    至于你的问题:

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

      符号是一个S-表达式,一个S-表达式可以包含符号。

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

      真的没什么。 (尽管可能存在一些细微的意图差异。)

    • (syntax, syntax values and syntax object) from s-expression有什么区别?

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

    【讨论】:

    • 很好的答案,有了这些解释,我想我可以继续阅读该帖子!:)
    猜你喜欢
    • 2013-04-10
    • 2012-04-09
    • 2012-01-07
    • 2012-02-27
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    相关资源
    最近更新 更多