0

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

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

12345

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

#!r6rs
(import (rnrs))

12345

话虽如此,我可以通过执行以下操作使其输出 12345:

#!r6rs
(import (rnrs))

(display 1235)

这是 r6rs 的新功能吗,只有在使用 明确指定时才会出现输出display?或者我只是做错了什么

4

1 回答 1

1

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

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

于 2010-06-03T01:43:54.350 回答