我看到SML / NJ包含一个队列结构。我无法弄清楚如何使用它。如何使用SML / NJ提供的附加库?

有帮助吗?

解决方案

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

$ sml
Standard ML of New Jersey v110.69 [built: Fri Mar 13 16:02:47 2009]
- Queue.mkQueue ();
[autoloading]
[library $SMLNJ-LIB/Util/smlnj-lib.cm is stable]
[autoloading done]
stdIn:1.1-1.17 Warning: type vars not generalized because of
   value restriction are instantiated to dummy types (X1,X2,...)
val it = - : ?.X1 Queue.queue
- 

你可以open一个结构。这样可以避免在所有内容前面输入Queue.。但是,在顶层做这件事是不鼓励的,因为它会污染环境并使你不太明显的依赖。 (在另一个结构中,我认为在某些情况下这可能是可以接受的。)

$ sml
Standard ML of New Jersey v110.69 [built: Fri Mar 13 16:02:47 2009]
- open Queue;
[autoloading]
[library $SMLNJ-LIB/Util/smlnj-lib.cm is stable]
[autoloading done]
opening Queue
  type 'a queue
  exception Dequeue
  val mkQueue : unit -> 'a queue
  val clear : 'a queue -> unit
  val isEmpty : 'a queue -> bool
  val enqueue : 'a queue * 'a -> unit
  val dequeue : 'a queue -> 'a
  val next : 'a queue -> 'a option
  val delete : 'a queue * ('a -> bool) -> unit
  val head : 'a queue -> 'a
  val peek : 'a queue -> 'a option
  val length : 'a queue -> int
  val contents : 'a queue -> 'a list
  val app : ('a -> unit) -> 'a queue -> unit
  val map : ('a -> 'b) -> 'a queue -> 'b queue
  val foldl : ('a * 'b -> 'b) -> 'b -> 'a queue -> 'b
  val foldr : ('a * 'b -> 'b) -> 'b -> 'a queue -> 'b
- mkQueue ();
stdIn:3.1-3.11 Warning: type vars not generalized because of
   value restriction are instantiated to dummy types (X1,X2,...)
val it = - : ?.X1 queue
- 

其他提示

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

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

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

希望这至少能指出你正确的方向。

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

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

其他所有内容都可以在此处找到。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top