首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用方案r5rs语言打印到控制台的折页

如何用方案r5rs语言打印到控制台的折页
EN

Stack Overflow用户
提问于 2021-10-15 14:19:18
回答 1查看 194关注 0票数 0
代码语言:javascript
复制
(define x '())
x

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

代码语言:javascript
复制
(define x '())
(display x)

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

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

我需要这样做,因为我的函数是在用户提供的错误输入情况下记录错误,我只希望将'()输入打印为'(),就像运行以下方案时的方案一样:

代码语言:javascript
复制
(define x '())
(cdr x)

给出=>

代码语言:javascript
复制
mcdr: contract violation
  expected: mpair?
  given: '() (Note the ')
EN

回答 1

Stack Overflow用户

发布于 2021-10-16 03:04:15

守则:

代码语言:javascript
复制
(define x '())
(define y '(1 . 2))
x ; ==> ()
y ; ==> (1 . 2)

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

拍奇

在球拍中,他们可以配置REPL应该如何在REPL /交互式窗口中打印值。在#lang racket中,当您使用display时,您将看到的实际值是

代码语言:javascript
复制
(display x) ; prints ()
(display y) ; prints (1 . 2)

但是,在$lang r5rs中,带有默认设置的默认REPL输出设置是print

代码语言:javascript
复制
x ; ==> '()
y ; ==> (mcons 1 2)

constructor作为输出样式:

代码语言:javascript
复制
x ; ==> empty
y ; ==> (cons 1 2)

quasiquote作为输出样式:

代码语言:javascript
复制
x ; ==> `()
y ; ==> `(1 . 2)

上述所有内容都没有真正打印值。它以选定的样式打印一个表达式,该表达式在计算时将成为相同的值。'()empty`()都计算为(),因此它们都是为计算'()时得到的值而打印的。

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

代码语言:javascript
复制
x ; ==> ()
y ; ==> (1 . 2)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69586198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档