编码:
(define x '())
(define y '(1 . 2))
x ; ==> ()
y ; ==> (1 . 2)
因此x
,在 Scheme REPL 中进行评估将显示()
,因为当您评估'()
它时,它会评估为没有 first 的事物'
。
球拍怪事
在 Racket 中,他们可以配置 REPL 如何在 REPL / 交互式窗口中打印值。在#lang racket
您使用时,display
您会看到真正的价值
(display x) ; prints ()
(display y) ; prints (1 . 2)
但是,在$lang r5rs
具有默认设置的默认 REPL 中,输出设置为print
:
x ; ==> '()
y ; ==> (mcons 1 2)
使用constructor
as 输出样式:
x ; ==> empty
y ; ==> (cons 1 2)
使用quasiquote
as 输出样式:
x ; ==> `()
y ; ==> `(1 . 2)
以上所有内容并没有真正打印出价值。它以所选样式打印一个表达式,在评估时将变为相同的值。'()
, empty
, 和 `()
all 评估为,()
因此所有这些都打印为您在评估时获得的值'()
唯一明智的选择是write
用作输出样式。这将以与所有其他方案实现相同的方式打印 REPL 中的实际值:
x ; ==> ()
y ; ==> (1 . 2)