为什么Racket解释器之前用撇号写入列表?

时间:2016-04-08 20:04:55

标签: scheme racket

为什么要写'(1 2 3)而不是(1 2 3)?

> (list 1 2 3)
'(1 2 3)

1 个答案:

答案 0 :(得分:5)

Racket的默认打印机将值打印为表达式,该值将计算为等效值(如果可能)。它尽可能使用quote(缩写');如果值包含不可引用的数据结构,则它使用构造函数。例如:

> (list 1 2 3)
'(1 2 3)
> (list 1 2 (set 3))   ;; sets are not quotable
(list 1 2 (set 3))

大多数Lisps和Schemes使用write函数打印值。您可以使用write参数将Racket打印机更改为print-as-expression模式,如下所示:

> (print-as-expression #f)
> (list 1 2 3)
(1 2 3)

有关详细信息,请参阅the docs on the Racket printer