你是否必须使用显示器来输出使用r6rs的东西?

时间:2010-06-03 01:21:04

标签: scheme r6rs r5rs

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

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

12345

然而,以下程序没有输出任何内容(这是一个r6rs程序):

#!r6rs
(import (rnrs))

12345

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

#!r6rs
(import (rnrs))

(display 1235)

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

1 个答案:

答案 0 :(得分:1)

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

使用R5RS语言查看某些输出的原因是您没有将其用作“模块”(如#lang r5rs),而是使用特定的R5RS “语言水平”。这种语言水平与R5RS更加兼容,但由于各种微妙的原因,这通常不是一个好主意。因此,使用#lang通常会更好,如果您想为自己节省一些额外的冗余问题,那么现在坚持使用#lang scheme会更容易,并且稍后会担心标准问题。 (但是YMMV,当然。)