【问题标题】:Do you have to use display to output stuff using r6rs?您是否必须使用显示来使用 r6rs 输出内容?
【发布时间】:2010-06-03 01:21:03
【问题描述】:

背景:我是方案新手,正在使用 DrScheme 编写程序。

当我以 r5rs 运行程序时,以下程序输出 12345:

12345

但是下面的程序什么也不输出(它是一个 r6rs 程序):

#!r6rs
(import (rnrs))

12345

话虽如此,我可以通过这样做来输出 12345:

#!r6rs
(import (rnrs))

(display 1235)

这是 r6rs 的新功能,只有在使用 display 专门指定时才会出现输出?还是我只是做错了什么

【问题讨论】:

  • 一个裸常量不应自动打印。

标签: scheme r6rs r5rs


【解决方案1】:

这是您在此处看到的一个微妙问题。在 PLT 中,首选的操作模式是在模块中编写代码,其中每个模块都有其编写语言的规范。通常,默认语言是#lang scheme#!#lang 的缩写)。在这种语言中,所有顶级非定义表达式的行为都是显示它们的值(除非它们是无效的——就像大多数副作用的结果一样)。但是#lang r5rs#lang r6rs 不做同样的事情——所以这些顶级表达式被计算但从不显示。

确实看到 R5RS 语言的一些输出的原因是您没有将它用作“模块”(如在 #lang r5rs 中),而是使用了特定的 R5RS“语言等级”。此语言级别与 R5RS 更兼容,但由于各种微妙的原因,这通常不是一个好主意。因此,使用#lang 通常会更好,如果您想省去一些额外的麻烦,那么现在坚持使用#lang scheme 会更容易,以后再担心标准。 (当然是 YMMV。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多