См. Racketrivia: Использование '
в качестве «суффикса идентификатора» в списке рассылки ракеток.Ответ Робби Финдлера и ответ Маттиаса Феллайзена объясняют это.
Первая строка, x
, нормальная.
Вторая строка, x'
, на самом деле является «выражением с половиной».Это интерпретируется как выражение x
, за которым следует незаконченное выражение '
.Незаконченное выражение может быть закончено на следующей строке.Все, что вы поместите в следующую строку, будет обозначено как вторая половина ' next-line
.
Это означает, что третья 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