Это тонкая проблема, которую вы видите здесь. В PLT предпочтительным режимом работы является написание кода в модуле, где каждый модуль имеет спецификацию языка, на котором он написан. Обычно языком по умолчанию является #lang scheme
(а #!
- это сокращение от #lang
). На этом языке поведение позволяет всем вышестоящим выражениям без определения отображать свои значения (если они не имеют значения - как в результате большинства побочных эффектов). Но #lang r5rs
и #lang r6rs
не делают одно и то же - поэтому эти выражения верхнего уровня оцениваются, но никогда не отображаются.
Причина, по которой вы увидели вывод с языком R5RS, заключается в том, что вы не использовали его в качестве "модуля" (как в #lang r5rs
), а вместо этого использовали определенный уровень языка R5RS ». Этот уровень языка более совместим с R5RS, но по различным тонким причинам это не очень хорошая идея в целом. Поэтому использование #lang
, как правило, лучше, и если вы хотите избавить себя от дополнительных лишних головных болей, будет проще, если вы будете придерживаться #lang scheme
на данный момент, а потом будете беспокоиться о стандартах. (Но YMMV, конечно.)