sml - 如何使用相对于导入器的路径从 SML 中的另一个文件导入?
问题描述
我正在使用 SML/NJ,我需要使用一组函数,这些函数f1.sml
位于另一个文件中的某个文件中f2.sml
。
但是,我不是f2.sml
直接运行,而是从其他地方导入它。
如果我将use
命令与相对于透视图f2.sml
的路径一起使用,则在我 import时,它将从运行脚本透视图查找提供的路径。f1.sml
f2.sml
f2.sml
我不能使用绝对路径,我不想合并这两个文件的内容。
抱歉,如果这是该语言的一个微不足道的应用程序,但我是 SML 的新手,还找不到答案。
解决方案
我推荐使用SML/NJ 的编译管理器(CM)。它是 SML/NJ 上下文中 SML 代码的构建系统。如果您需要更高级的功能,它可能会变得相当复杂,但它很容易上手。我将向您展示一个准系统结构,您可以根据需要进行调整。它已经随 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
推荐阅读
- gnuplot - gnuplot:在绘图点后面绘制网格,在前面绘制网格
- c# - WebClient 在下载时使我的应用程序冻结(无响应)。为什么?
- php - while 循环传递不同的值,但 ajax 只会获得第一个值
- codenameone - 创建一个漂亮的 Codename One 滑块以通知百分比
- java - 无法运行 Media 类的简单演示
- c# - 错误代码:-2147023281,消息:C# 中使用高级搜索()的“操作失败”
- c# - 与其他计算机共享 ado.net 应用程序数据库
- java - hibernate 无法正确构建查询
- android - 一个 Google 帐户多个设备,有没有办法从设备访问信息?
- database - 图:使用电子邮件和短信进行警报管理