3

我看到 SML/NJ 包含一个队列结构。我不知道如何使用它。如何使用 SML/NJ 提供的附加库?

4

3 回答 3

3

SML '97 没有指定该Queue结构,但它存在于 SML/NJ 的顶级环境中。

$ sml
新泽西州标准 ML v110.69 [构建:Fri Mar 13 16:02:47 2009]
- 队列.mkQueue();
[自动加载]
[库 $SMLNJ-LIB/Util/smlnj-lib.cm 稳定]
[自动加载完成]
标准输入:1.1-1.17 警告:类型 vars 未泛化,因为
   值限制被实例化为虚拟类型(X1,X2,...)
val it = - : ?.X1 Queue.queue
-

你可以open一个结构。这可以让您避免Queue.在所有内容前面打字。但是,不鼓励在顶层执行此操作,因为它会污染环境并使您所依赖的东西变得不那么明显。(在另一种结构中,我会说在某些情况下它可能是可以接受的。)

$ sml
新泽西州标准 ML v110.69 [构建:Fri Mar 13 16:02:47 2009]
- 开放队列;
[自动加载]
[库 $SMLNJ-LIB/Util/smlnj-lib.cm 稳定]
[自动加载完成]
开放队列
  输入'一个队列
  异常出队
  val mkQueue : unit -> '一个队列
  val clear : '一个队列 -> 单元
  val isEmpty : '一个队列 -> bool
  val enqueue : 'a queue * 'a -> unit
  val dequeue : '一个队列 -> 'a
  val next : '一个队列 -> '一个选项
  val delete : 'a queue * ('a -> bool) -> unit
  val head : '一个队列 -> 'a
  val peek : '一个队列 -> '一个选项
  val length : '一个队列-> int
  val 内容:'一个队列->'一个列表
  val app : ('a -> unit) -> 'a queue -> unit
  val map : ('a -> 'b) -> 'a 队列 -> 'b 队列
  val foldl : ('a * 'b -> 'b) -> 'b -> 'a 队列 -> 'b
  val foldr : ('a * 'b -> 'b) -> 'b -> 'a 队列 -> 'b
- mk队列();
标准输入:3.1-3.11 警告:类型 vars 未泛化,因为
   值限制被实例化为虚拟类型(X1,X2,...)
val it = - : ?.X1 队列
-
于 2009-07-01T17:38:26.250 回答
1

我没有完整的答案给你,但我可以为你指出正确的方向。您应该使用 SML/NJ 内置的编译管理器 (CM) 进行查找。您可以将其视为 Make for SML。

要使用 SML/NJ 库中的库,您需要将 smlnj-lib.cm 添加到应用程序的 CM 描述文件中。然后,您可以使用该库中的 Queue 等声明。

smlnj 网站上有一些关于编译管理器的文档。

希望这至少可以为您指明正确的方向。

于 2008-10-21T23:59:44.810 回答
0

如果要创建整数队列,请使用以下代码。将“int”替换为您想要的数据类型。

val que = Queue.mkqueue(): int Queue.queue

其他一切都可以在这里找到。

于 2013-08-24T19:28:10.613 回答