输入“后的奇怪输出”;素数;关于Racket REPL中的标识符

输入“后的奇怪输出”;素数;关于Racket REPL中的标识符,racket,Racket,今天,我在REPL中犯了一个打字错误,发现了一个奇怪的行为。下面是互动的一个示例: Welcome to Racket v6.11. > (define x 3) > x 3 > x' 3 > x 'x > 因此,我键入的第一个x产生了3,这是预期的结果。我意外输入的x'导致了3,这是出乎意料的。最后一个x导致'x(!!) 似乎我不明白REPL如何读取值。有人能解释一下REPL为什么会这样做吗?请参见racket邮件列表上的。两者都解释了这一点 第一行,x,是正

今天,我在REPL中犯了一个打字错误,发现了一个奇怪的行为。下面是互动的一个示例:

Welcome to Racket v6.11.
> (define x 3)
> x
3
> x'
3
> x
'x
> 
因此,我键入的第一个
x
产生了
3
,这是预期的结果。我意外输入的
x'
导致了
3
,这是出乎意料的。最后一个
x
导致
'x
(!!)

似乎我不明白REPL如何读取值。有人能解释一下REPL为什么会这样做吗?

请参见racket邮件列表上的。两者都解释了这一点

第一行,
x
,是正常的

第二行,
x'
,实际上是一个“半表达式”。它被解释为一个表达式
x
,后面是一个未完成的表达式
。未完成的表达式允许在下一行完成。下一行的内容将作为下一行的下半部分

这意味着第三个
x
实际上被解释为
'x
的后半部分

您可以看到带括号的未完成表达式的更好示例:

> 1 (list 2     ; 1 followed by an unfinished expression
1
> 3 4)          ; finishing it
'(2 3 4)
> 3 4)          ; on its own without the `(list 2` before it it's an error
3
4
; readline-input:13:3: read-syntax: unexpected `)` [,bt for context]
表达式后的引号的解释方式类似:

> 1 '                            ; 1 followed by an unfinished expression
1
> (indefatigable inexhaustible)  ; finishes previously unfinished, put after a quote
'(indefatigable inexhaustible)
> (indefatigable inexhaustible)  ; on its own without the quote before it it's an error
; indefatigable: undefined;
;  cannot reference an identifier before its definition
;   in module: top-level
;   internal name: indefatigable