gpt4 book ai didi

sml - 如何使用相对于导入器的路径从 SML 中的另一个文件导入?

转载 作者:行者123 更新时间:2023-12-04 23:37:03 28 4
gpt4 key购买 nike

我正在使用 SML/NJ,我需要使用某个文件中的一组函数 f1.sml在另一个文件中 f2.sml .

但是,我没有运行 f2.sml直接,相反,我从其他地方导入它。

如果我使用 use f2.sml 中的命令带有到 f1.sml 的路径相对于 f2.sml透视,当我导入时 f2.sml ,它将从运行脚本的角度查找提供的路径。

我不能使用绝对路径,我不想合并两个文件的内容。

对不起,如果这是该语言的一个微不足道的应用程序,但我是 SML 的新手,还找不到答案。

最佳答案

我建议使用 SML/NJ's Compilation Manager (厘米)。它是 SML/NJ 上下文中 SML 代码的构建系统。如果您需要,它会变得非常复杂 more advanced features ,但很容易上手。我将向您展示一个准系统结构,您可以根据需要进行调整。它已经随 SML/NJ 一起安装,因此没有安装过程。

我将在此示例中使用以下目录结构(不强加文件扩展名,只是一个约定):

.
├── build.cm
└── src
├── foo.fun
├── foo.sig
└── main.sml

构建.cm
group
(* CM allows you to selectively export defined modules (structures,
signatures and functors) by listing them here. It's useful for
libraries. *)

source (-) (* export all defined modules *)

structure Main (* OR, export selectively *)
signature FOO
functor Foo
is
(* Import the SML standard library, aka Basis. *)
(* See: http://sml-family.org/Basis/ *)
$/basis.cm

(* Import the SML/NJ library *)
(* Provides extra data structures and algorithms. *)
(* See: https://www.smlnj.org/doc/smlnj-lib/Manual/toc.html *)
$/smlnj-lib.cm

(* List each source file you want to be considered for compilation. *)
src/main.sml
src/foo.sig
src/foo.fun

src/main.sml
structure Main =
struct
(* You don't have to import the `Foo` functor. *)
(* It's been done in build.cm already. *)
structure F = Foo()

fun main () =
print (F.message ^ "\n")
end

src/foo.sig
signature FOO =
sig
val message : string
end

src/foo.fun
(* You don't have to import the `FOO` signature. *)
(* It's been done in build.cm already. *)
functor Foo() : FOO =
struct
val message = "Hello, World!"
end

用法

结构就绪后,您可以使用 CM.make 开始编译并通过调用您定义的任何函数来运行:
$ sml
Standard ML of New Jersey v110.82 [built: Tue Jan 9 20:54:02 2018]
- CM.make "build.cm";
val it = true : bool
-
- Main.main ();
Hello, World!
val it = () : unit

关于sml - 如何使用相对于导入器的路径从 SML 中的另一个文件导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50595106/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com