Как скомпилировать несколько файлов SML?
Как работает компиляция нескольких файлов в Standard-ML? У меня есть 2 файла.
file1.sml
:
(* file1.sml *)
datatype fruit = Orange | Apple | None
А также file2.sml
:
(* file2.sml *)
datatype composite = Null | Some of fruit
Итак, как вы можете видеть file2.sml
использует материал из file1.sml
, Как я могу заставить эту вещь скомпилировать?
я использую mosmlc.exe
и при компиляции mosmlc file2.sml
(что касается этого вопроса):
(* file2.sml *)
use "file1.sml";
datatype composite = Null | Some of fruit
Я получил:
! use "file1.sml";
! ^^^
! Syntax error.
Итак, как бороться с несколькими файлами?
1 ответ
Вы можете прочитать больше в Руководстве для владельца ML, но в вашем конкретном случае следующая команда должна работать, даже не используя use
в исходном коде:
mosmlc -toplevel file1.sml file2.sml
Использование режима структуры
Если вы хотите организовать свой код в структуру, вы можете использовать -structure
флаг mosmlc
, Например, даны следующие файлы:
Hello.sml
structure Hello =
struct
val hello = "Hello"
end
World.sml
structure World =
struct
structure H = Hello
val world = H.hello ^ ", World!"
end
main.sml
fun main () =
print (World.world ^ "\n")
val _ = main ()
Теперь вы можете получить исполняемый файл с именем main
, как это:
mosmlc -structure Hello.sml World.sml -toplevel main.sml -o main
И затем запустите это:
$ ./main
Hello, World!
Режим структуры требует, чтобы имена файлов и содержащаяся в них структура совпадали, как в классах Java, и файлы должны иметь одинаковые имена. Вы также можете использовать .sig
файлы, которые содержат подписи.