Domanda

Vedo che SML / NJ include una struttura di coda. Non riesco a capire come usarlo. Come posso utilizzare le librerie aggiuntive fornite da SML / NJ?

È stato utile?

Soluzione

La Queue non è specificato da SML '97, ma è presente nell'ambiente di livello superiore di 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
- 

Puoi aprire una struttura. Ciò ti consente di evitare di digitare Queue. davanti a tutto. È scoraggiato farlo ai massimi livelli, perché inquina l'ambiente e rende molto meno ovvio da cosa si dipende. (All'interno di un'altra struttura direi che potrebbe essere accettabile in alcune situazioni.)

$ 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
- 

Altri suggerimenti

Non ho una risposta completa per te, ma potrei indicarti la giusta direzione. Dovresti cercare usando il compilation manager (CM) integrato in SML / NJ. Puoi pensarlo come Make for SML.

Per utilizzare una libreria dalla libreria SML / NJ, aggiungere smlnj-lib.cm al file di descrizione CM dell'applicazione. Quindi è possibile utilizzare le dichiarazioni come Queue da quella libreria.

Il sito web smlnj ha una documentazione sul gestore della compilazione .

Spero che questo ti punti almeno nella giusta direzione.

Se si desidera creare una coda intera, utilizzare il seguente codice. Sostituisci "int" con il tipo di dati che desideri.

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

Tutto il resto può essere trovato qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top