繁体   English   中英

如何使用方案 r5rs 语言将以下内容打印到控制台

[英]How to print the folowing to console in scheme r5rs language

(define x '())
x

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

(define x '())
(display x)

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

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

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

(define x '())
(cdr x)

给 =>

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

编码:

(define x '())
(define y '(1 . 2))
x ; ==> ()
y ; ==> (1 . 2)

因此,在 Scheme REPL 中评估x将显示()因为当您评估'()它评估的是没有第一个'的东西。

球拍怪癖

在 Racket 中,他们可以配置 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)
 (format "'%s" '())

scheme ia中的输出语法和输入语法不一样,需要自己创建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM