如何编译多个SML文件?

And*_*dry 3 sml mosml

如何在Standard-ML中编译多个文件?我有2个档案。

file1.sml

(* file1.sml *)
datatype fruit = Orange | Apple | None
Run Code Online (Sandbox Code Playgroud)

file2.sml

(* file2.sml *)
datatype composite = Null | Some of fruit
Run Code Online (Sandbox Code Playgroud)

如您所见,file2.sml正在使用中的内容file1.sml。我该如何编译此东西?

我正在使用mosmlc.exe并且在编译时mosmlc file2.sml(针对此问题):

(* file2.sml *)
use "file1.sml";
datatype composite = Null | Some of fruit
Run Code Online (Sandbox Code Playgroud)

我得到:

! use "file1.sml";
! ^^^
! Syntax error.
Run Code Online (Sandbox Code Playgroud)

那么,如何处理多个文件呢?

Ion*_*tan 5

您可以在Moscow ML用户手册中阅读更多信息,但是在您的特殊情况下,以下命令应该可以工作,而不必use在源代码中使用:

mosmlc -toplevel file1.sml file2.sml
Run Code Online (Sandbox Code Playgroud)

使用结构模式

要将代码组织到结构中时,可以使用-structure标记mosmlc。例如,给定以下文件:

Hello.sml

structure Hello =
  struct
    val hello = "Hello"
  end
Run Code Online (Sandbox Code Playgroud)

World.sml

structure World =
  struct
    structure H = Hello

    val world = H.hello ^ ", World!"
  end
Run Code Online (Sandbox Code Playgroud)

main.sml

fun main () =
  print (World.world ^ "\n")

val _ = main ()
Run Code Online (Sandbox Code Playgroud)

现在,您可以获得一个名为的可执行文件main,如下所示:

mosmlc -structure Hello.sml World.sml -toplevel main.sml -o main
Run Code Online (Sandbox Code Playgroud)

然后运行它:

$ ./main
Hello, World!
Run Code Online (Sandbox Code Playgroud)

结构模式要求您文件的名称与所包含的结构重合,就像在Java类中,文件必须具有相同的名称一样。您也可以使用.sig包含签名的文件。