0
(define x '())
x

在 repl 控制台中给出 =>'()

(define x '())
(display x)

给出 =>()但我想像这样打印它'()

如何使显示打印'()而不是()

我需要这个,因为我的函数正在记录用户提供的错误输入的错误,并且我只想打印'()输入'(),有点像运行以下命令时方案的方式:

(define x '())
(cdr x)

给=>

mcdr: contract violation
  expected: mpair?
  given: '() (Note the ')
4

1 回答 1

1

编码:

(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)

使用constructoras 输出样式:

x ; ==> empty
y ; ==> (cons 1 2)

使用quasiquoteas 输出样式:

x ; ==> `()
y ; ==> `(1 . 2)

以上所有内容并没有真正打印出价值。它以所选样式打印一个表达式,在评估时将变为相同的值。'(), empty, 和 `()all 评估为,()因此所有这些都打印为您在评估时获得的值'()

唯一明智的选择是write用作输出样式。这将以与所有其他方案实现相同的方式打印 REPL 中的实际值:

x ; ==> ()
y ; ==> (1 . 2)
于 2021-10-16T03:04:15.153 回答