Структурирование библиотеки в SML

В настоящее время я создаю тестовую библиотеку в Standard ML (используя Poly/ML в качестве переводчика). У меня есть следующая структура каталогов:

project/a.sml
project/src/b.sml
project/src/c.sml
...

куда a.sml это просто набор звонков для использования

use "src/b.sml"
use "src/c.sml"
...

b.sml, c.sml и т. д. все определения структуры, как это

structure ComponentX
struct
...
end

которые образуют красивые, логически разделенные компоненты библиотеки. Иногда я также создаю один модуль в одном файле, а затем представляю подструктуру в том же модуле в другом файле.

Затем я могу нормально использовать библиотеку тестирования в корневом каталоге проекта, вызвав use "a.sml",

Тем не менее, я не могу использовать код за пределами своего собственного каталога, что является проблемой. Например, скажем, я в родительском каталоге project, Если я тогда позвоню use "project/a.sml"последующие звонки use "src/x.sml" попытаться найти src каталог в родительском (который не существует).

Есть ли способ сделать родственника use, или есть лучший способ структурировать это в целом?

1 ответ

Решение

use Сама функция в Poly/ML не меняет путь, когда она используется рекурсивно. Вам нужно будет явно изменить путь в подкаталоге, используя OS.FileSys.chDir, use это просто функция, чтобы вы могли переопределить ее, если хотите. OS.Path а также OS.FileSys структуры могут быть полезны.

Альтернативой является реорганизация вашего кода, чтобы использовать PolyML.make, Вам нужно будет переименовать ваши файлы, чтобы они соответствовали названию структуры, содержащейся в каждом файле, например, ComponentX.sml будет содержать структуру ComponentX. Подробнее об этом см. http://polyml.org/documentation/Reference/PolyMLMake.html или ответ на этот вопрос о Poly/ML с вложенными структурами каталогов.

Другие вопросы по тегам