Como faço para usar a biblioteca de fila no SML / NJ
Pergunta
eu ver que o SML / NJ inclui uma estrutura de fila. Eu não consigo descobrir como usá-lo. Como faço para usar as bibliotecas adicionais fornecidos pela SML / NJ?
Solução
O Queue
estrutura não é especificado por SML ' 97, mas está presente no ambiente de nível superior do 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 -
Você pode open
uma estrutura. Isto permite-lhe evitar a digitação Queue.
na frente de tudo. É desencorajado de fazer isso no nível superior, porém, porque polui o meio ambiente e torna muito menos óbvio que você está dependendo. (Dentro de uma outra estrutura, eu diria que pode ser aceitável em algumas situações.)
$ 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 -
Outras dicas
Eu não tenho uma resposta completa para você, mas eu poderia apontar na direção certa. Você deve olhar para cima usando o gerenciador de compilação (CM), que é incorporado ao SML / NJ. Você pode pensar nisso como fazer para SML.
Para usar uma biblioteca da biblioteca SML / NJ você em seguida, adicione smlnj-lib.cm para o arquivo de descrição CM de sua aplicação. Então você pode usar as declarações como Queue daquele biblioteca.
O site smlnj tem alguma documentação sobre a compilação gerente .
Hope isso pelo menos pontos-lo na direção certa.
Se você quiser criar um inteiro fila, utilize o seguinte código. Substitua 'int' com o tipo de dados que deseja.
val que = Queue.mkqueue(): int Queue.queue
Tudo o resto pode ser encontrada aqui.