使用 r6rs 必须使用 display 来输出内容吗?

发布于 2024-09-04 00:03:17 字数 377 浏览 11 评论 0原文

背景:我是计划的新手,正在使用 DrScheme 来编写我的程序。

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

12345

但是,以下程序不输出任何内容(它是一个 r6rs 程序):

#!r6rs
(import (rnrs))

12345

也就是说,我可以通过这样做来使其输出 12345:

#!r6rs
(import (rnrs))

(display 1235)

这是 r6rs 的新功能吗,其中输出仅当使用 display 特别指定时才会发生?或者我只是做错了什么

Background: I am new to scheme, and am using DrScheme to write my programs.

The following program outputs 12345 when I run the program as r5rs:

12345

However the following program outputs nothing (it's an r6rs program):

#!r6rs
(import (rnrs))

12345

That being said, I can get it to output 12345 by doing this:

#!r6rs
(import (rnrs))

(display 1235)

Is that something new with r6rs, where output only occurs when specifically specified using display? Or am I just doing something else wrong

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清旖 2024-09-11 00:03:17

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

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

This is a subtle issue that you're seeing here. In PLT, the preferred mode of operation is to write code in a module, where each module has a specification of the language it is written it. Usually, the default language is #lang scheme (and #! is short for #lang). In this language, the behavior is for all toplevel non-definition expressions to display their values (unless they're void -- as in the result of most side-effects). But the #lang r5rs and #lang r6rs don't do the same -- so these toplevel expressions are evaluated but never displayed.

The reason you did see some output with the R5RS language is that you didn't use it as a "module" (as in #lang r5rs), but instead used the specific R5RS "language level". This language level is more compatible to the R5RS, but for various subtle reasons this is not a good idea in general. Using #lang is therefore generally better, and if you want to save yourself some additional redundant headaches, it'll be easier if you stick with #lang scheme for now, and worry about standards later. (But YMMV, of course.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文