Вы используете read-eval-print-loop
, что по сути то же самое, что и eval
, и поэтому имеет те же проблемы. См. соответствующий раздел руководства для подробного объяснения. Лучше прочитать это полностью, но ответы, которые вы ищете, - это то, что описано в разделе «Пространства имен», или раздел «Пространства имен и модули» - первое, если вы хотите использовать пространство имен верхнего уровня, и во-вторых, если вы хотите, чтобы пространство имен соответствовало фактическому файлу, в котором появляется код. (Первое обычно лучше - например, если вы используете второе, тогда repl-server
само доступно для пользователя REPL, что делает его сомнительная особенность ...)
Вот как это будет выглядеть:
...
(thread (lambda ()
(parameterize ([current-namespace (make-base-namespace)])
...same code...)))
...
, а для второго определите привязку и используйте namespace-anchor->namespace
, как показано в последнем примере на этой странице.
[Кстати, см. Также вещь run-server
, она немного старая, но все еще может быть полезной.]