¿Cómo uso la biblioteca de colas en SML / NJ?
Pregunta
Veo que SML / NJ incluye una estructura de cola. No puedo entender cómo usarlo. ¿Cómo uso las bibliotecas adicionales proporcionadas por SML / NJ?
Solución
La Queue
estructura no está especificado por SML '97, pero está presente en el entorno de nivel superior de 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 -
Puede abrir
una estructura. Esto le permite evitar escribir Queue.
delante de todo. Sin embargo, se desaconseja hacerlo en el nivel superior, ya que contamina el medio ambiente y hace que sea mucho menos obvio de lo que depende. (Dentro de otra estructura, diría que podría ser aceptable en algunas situaciones).
$ 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 -
Otros consejos
No tengo una respuesta completa para ti, pero podría orientarte en la dirección correcta. Debería buscar utilizando el administrador de compilación (CM) integrado en SML / NJ. Puedes considerarlo como Make for SML.
Para usar una biblioteca de la biblioteca SML / NJ, agregue smlnj-lib.cm al archivo de descripción CM de su aplicación. Luego puede usar las declaraciones como Cola de esa biblioteca.
El sitio web smlnj tiene documentación sobre el administrador de compilación .
Espero que esto al menos te señale en la dirección correcta.
Si desea crear una Cola entera, use el siguiente código. Reemplace 'int' con el tipo de datos que desee.
val que = Queue.mkqueue(): int Queue.queue
Todo lo demás se puede encontrar aquí.