Форма include
не работает, потому что, если для языка задано значение «Начинающий студент» или один из других языков обучения, DrRacket фактически оборачивает вашу программу в модуль. Вы можете увидеть это, если откроете "test.rkt"
в обычном текстовом редакторе. Бит #reader....
- это то, что генерирует модуль. Но когда это получает included
в другой файл, это не имеет смысла. Таким образом ошибка жалуется на module
.
К сожалению, насколько я могу судить, языки HtDP до сих пор не имеют provide
, и это то, что вам нужно для правильной работы.
Если вы действительно хотите, чтобы это сработало, вот способ взломать его:
Создайте новый файл с именем "provide.rkt"
в том же каталоге, что и другие ваши файлы. Пока вы редактируете этот файл (и только этот файл), установите «Язык в DrRacket» на «Определить язык из источника». Поместите следующие две строки в "provide.rkt"
:
#lang racket
(provide provide)
(Это объявляет модуль, использующий полный язык Racket, который предоставляет только встроенную специальную форму provide
.)
Добавьте следующие строки в вашу программу "test.rkt"
. (Убедитесь, что язык DrRacket установлен на «Beginning Student» или на любой язык обучения, который вы используете для этого.)
(require "provide.rkt")
(provide test)
Теперь "test.rkt"
- это модуль, который экспортирует вашу функцию test
. (Это всегда был модуль, раньше у него не было экспорта, поэтому он был не очень полезен.)
Добавьте следующие строки в вашу программу "newtest.rkt"
:
(require "test.rkt")
Это импортирует все, что предусмотрено "test.rkt"
: в настоящее время просто test
, но вы можете добавить другие вещи, вам просто нужно provide
их.