Нужно ли использовать дисплей для вывода материала с использованием r6rs? - PullRequest
0 голосов
/ 03 июня 2010

Справочная информация: я новичок в схеме и использую DrScheme для написания своих программ.

Следующая программа выводит 12345, когда я запускаю программу как r5rs:

12345

Однако следующая программа ничего не выводит (это программа r6rs):

#!r6rs
(import (rnrs))

12345

При этом я могу получить его для вывода 12345, выполнив следующее:

#!r6rs
(import (rnrs))

(display 1235)

Это что-то новое с r6rs, где вывод происходит только в том случае, если специально указано с помощью display? Или я просто что-то не так делаю

1 Ответ

1 голос
/ 03 июня 2010

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

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

...