这是对 Scheme、Racket、Common Lisp 和 Clojure 中方括号行为的正确描述吗?
Is this a correct characterisation of the behaviours of square brackets in Scheme, Racket, Common Lisp, and Clojure?
我最近做了一些挖掘工作。由于我缺乏 Lisp 经验,我想验证我发现了什么。这是对 Scheme、Racket、Common Lisp 和 Clojure 中方括号行为的正确描述吗?
- R5RS 和 R7RS 方案:方括号在规范中保留“用于将来可能对语言的扩展”(R5RS and page 9 for R7RS), but implementations tend to implement square brackets as R6RS Scheme does below. Racket is one such example 的第 6 页,甚至有社区约定在哪里更喜欢方括号。
- R6RS方案:“Matched square brackets can be used synonymously with parentheses". In other words, square brackets are valid brackets as long as they match. Alternative source.
- Common Lisp:Square brackets are reserved so the user can give them meaning via reader macros。它们在标准语言中没有意义,除了在
FORMAT
控制字符串中。
- Clojure:Square brackets for vectors and parentheses for lists。这些不是一回事。
我认为对于Scheme,你是对的。
在 Common Lisp 中,标准不是 CLtL2,而是 ANSI 标准,其所有意图和目的与 CLHS 相同(例如 https://clhs.lisp.se). The reader behaviour is defined in section 2。方括号由 默认(即在标准语法中)是组成字符,因此它们可以在符号名称中使用而无需特殊转义。例如,[
、[]
, ][
, APPLE-][
, >][<
, [[[
等都是有效的符号名称,无需转义即可使用。但是,这些字符明确保留给程序员在他们自己的可读表中使用。一些库使用它,例如 CLSQL 用于 SQL 文字。
在 Clojure 中,方括号表示向量,它是一种独立于 e 的集合。 G。列出。代码中一个文字向量的求值就是在里面构造一个求值形式的新向量。示例:[a 'b (+ a b)]
求值为 a
的值、名为 b
的符号以及 a
和 b
的值之和的新向量。宏和其他特殊形式通常对不作为函数调用求值的语法部分使用向量。示例:(defn foo [a b c] …)
— 一个符号向量,作为形式参数绑定在函数定义的主体中。 (let [a 1 b (+ a forble)] …)
— a
和 b
.
的词法绑定
我最近做了一些挖掘工作。由于我缺乏 Lisp 经验,我想验证我发现了什么。这是对 Scheme、Racket、Common Lisp 和 Clojure 中方括号行为的正确描述吗?
- R5RS 和 R7RS 方案:方括号在规范中保留“用于将来可能对语言的扩展”(R5RS and page 9 for R7RS), but implementations tend to implement square brackets as R6RS Scheme does below. Racket is one such example 的第 6 页,甚至有社区约定在哪里更喜欢方括号。
- R6RS方案:“Matched square brackets can be used synonymously with parentheses". In other words, square brackets are valid brackets as long as they match. Alternative source.
- Common Lisp:Square brackets are reserved so the user can give them meaning via reader macros。它们在标准语言中没有意义,除了在
FORMAT
控制字符串中。 - Clojure:Square brackets for vectors and parentheses for lists。这些不是一回事。
我认为对于Scheme,你是对的。
在 Common Lisp 中,标准不是 CLtL2,而是 ANSI 标准,其所有意图和目的与 CLHS 相同(例如 https://clhs.lisp.se). The reader behaviour is defined in section 2。方括号由 默认(即在标准语法中)是组成字符,因此它们可以在符号名称中使用而无需特殊转义。例如,[
、[]
, ][
, APPLE-][
, >][<
, [[[
等都是有效的符号名称,无需转义即可使用。但是,这些字符明确保留给程序员在他们自己的可读表中使用。一些库使用它,例如 CLSQL 用于 SQL 文字。
在 Clojure 中,方括号表示向量,它是一种独立于 e 的集合。 G。列出。代码中一个文字向量的求值就是在里面构造一个求值形式的新向量。示例:[a 'b (+ a b)]
求值为 a
的值、名为 b
的符号以及 a
和 b
的值之和的新向量。宏和其他特殊形式通常对不作为函数调用求值的语法部分使用向量。示例:(defn foo [a b c] …)
— 一个符号向量,作为形式参数绑定在函数定义的主体中。 (let [a 1 b (+ a forble)] …)
— a
和 b
.