背景知识:我是个新手,正在使用DrScheme编写我的程序。
当我以r5rs身份运行程序时,以下程序输出12345:
12345但是,下面的程序不输出任何内容(它是一个r6rs程序):
#!r6rs
(import (rnrs))
12345也就是说,我可以通过执行以下操作使其输出12345:
#!r6rs
(import (rnrs))
(display 1235)这是r6rs的新特性吗?只有在使用display指定输出时,才会出现输出。或者我只是做错了什么
发布于 2010-06-03 09:43:54
这是你在这里看到的一个微妙的问题。在PLT中,首选的操作模式是在模块中编写代码,其中每个模块都有它所编写的语言的规范。通常,默认语言是#lang scheme ( #!是#lang的缩写)。在这种语言中,行为是让所有顶层的非定义表达式显示它们的值(除非它们是空的--这是大多数副作用的结果)。但是#lang r5rs和#lang r6rs不会做同样的事情--所以这些顶层表达式会被计算,但从来不会显示。
您看到R5RS语言的一些输出的原因是您没有将其用作“模块”(就像在#lang r5rs中一样),而是使用了特定的R5RS“语言级别”。这种语言级别与R5RS更兼容,但由于各种微妙的原因,这通常不是一个好主意。因此,使用#lang通常更好,如果您想省去一些额外的冗余麻烦,如果您现在坚持使用#lang scheme,以后再考虑标准会更容易一些。(当然,还有YMMV。)
https://stackoverflow.com/questions/2962778
复制相似问题