我看到SML / NJ包含一个队列结构。我无法弄清楚如何使用它。如何使用SML / NJ提供的附加库?
答案 0 :(得分:3)
SML '97未指定Queue
structure,但它存在于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 -
答案 1 :(得分:1)
我没有完整的答案,但我可以指出你正确的方向。您应该使用内置于SML / NJ的编译管理器(CM)进行查找。您可以将其视为Make for SML。
要使用SML / NJ库中的库,请将smlnj-lib.cm添加到应用程序的CM描述文件中。然后,您可以使用该库中的Queue等声明。
smlnj网站上有一些关于compilation manager的文档。
希望这至少能指出你正确的方向。
答案 2 :(得分:0)