输入“后的奇怪输出”;素数;关于Racket REPL中的标识符
今天,我在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,是正
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