背景:我是计划新手,并且正在使用DrScheme来编写我的程序。
当我以r5rs运行程序时,以下程序输出12345:
12345
然而,以下程序没有输出任何内容(这是一个r6rs程序):
#!r6rs
(import (rnrs))
12345
话虽如此,我可以通过这样做来输出12345:
#!r6rs
(import (rnrs))
(display 1235)
这是r6rs的新功能,只有在使用display
专门指定时才会输出?或者我只是做错了什么
答案 0 :(得分:1)
这是你在这里看到的一个微妙的问题。在PLT中,首选操作模式是在模块中编写代码,其中每个模块都具有对其编写语言的规范。通常,默认语言为#lang scheme
(#!
是#lang
的缩写。在这种语言中,行为是针对所有顶层非定义表达式显示它们的值(除非它们是无效的 - 就像大多数副作用的结果一样)。但是#lang r5rs
和#lang r6rs
不一样 - 所以这些顶级表达式被计算但从未显示过。
使用R5RS语言查看某些输出的原因是您没有将其用作“模块”(如#lang r5rs
),而是使用特定的R5RS “语言水平”。这种语言水平与R5RS更加兼容,但由于各种微妙的原因,这通常不是一个好主意。因此,使用#lang
通常会更好,如果您想为自己节省一些额外的冗余问题,那么现在坚持使用#lang scheme
会更容易,并且稍后会担心标准问题。 (但是YMMV,当然。)