2010-06-03 34 views
0

背景:我是新手,我正在使用DrScheme编写我的程序。您是否必须使用显示器使用r6rs输出内容?

以下程序输出12345,当我运行该程序的R5RS:

12345 

但是下面的程序输出什么(这是一个R6RS程序):

#!r6rs 
(import (rnrs)) 

12345 

话虽这么说,我可以得到它输出12345这样做:

#!r6rs 
(import (rnrs)) 

(display 1235) 

这是一些新的r6rs,whe仅在使用display专门指定时才会出现重新输出?或者我只是在做其他事情

+0

裸露的常量不应该自动打印。 – muhmuhten 2010-06-03 01:23:14

回答

1

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

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

相关问题