(define x '())
x在repl控制台中给出了=> '()
(define x '())
(display x)给出=> (),但我想像'()那样打印它
如何使显示打印'()而不是()?
我需要这样做,因为我的函数是在用户提供的错误输入情况下记录错误,我只希望将'()输入打印为'(),就像运行以下方案时的方案一样:
(define x '())
(cdr x)给出=>
mcdr: contract violation
expected: mpair?
given: '() (Note the ')发布于 2021-10-16 03:04:15
守则:
(define x '())
(define y '(1 . 2))
x ; ==> ()
y ; ==> (1 . 2)因此,在Scheme中评估x将显示(),因为当您计算'()时,它的计算结果是没有第一个'的东西。
拍奇
在球拍中,他们可以配置REPL应该如何在REPL /交互式窗口中打印值。在#lang racket中,当您使用display时,您将看到的实际值是
(display x) ; prints ()
(display y) ; prints (1 . 2)但是,在$lang r5rs中,带有默认设置的默认REPL输出设置是print
x ; ==> '()
y ; ==> (mcons 1 2)以constructor作为输出样式:
x ; ==> empty
y ; ==> (cons 1 2)以quasiquote作为输出样式:
x ; ==> `()
y ; ==> `(1 . 2)上述所有内容都没有真正打印值。它以选定的样式打印一个表达式,该表达式在计算时将成为相同的值。'()、empty和`()都计算为(),因此它们都是为计算'()时得到的值而打印的。
唯一明智的选择是使用write作为输出样式。这将以与所有其他方案实现相同的方式在REPL中打印实际值:
x ; ==> ()
y ; ==> (1 . 2)https://stackoverflow.com/questions/69586198
复制相似问题