Как использовать библиотеку очередей в SML / NJ - PullRequest
3 голосов
/ 13 октября 2008

Я вижу, что SML / NJ включает структуру очереди. Я не могу понять, как его использовать. Как использовать дополнительные библиотеки, предоставляемые SML / NJ?

Ответы [ 3 ]

3 голосов
/ 01 июля 2009

Структура 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
- 
1 голос
/ 22 октября 2008

У меня нет полного ответа для вас, но я мог бы указать вам правильное направление. Вы должны искать с помощью менеджера компиляции (CM), который встроен в SML / NJ. Вы можете думать об этом как Make for SML.

Чтобы использовать библиотеку из библиотеки SML / NJ, вы затем добавляете smlnj-lib.cm в файл описания CM вашего приложения. Затем вы можете использовать объявления, такие как Очередь из этой библиотеки.

На сайте smlnj есть некоторая документация о диспетчере компиляций .

Надеюсь, это, по крайней мере, укажет вам правильное направление.

0 голосов
/ 24 августа 2013

Если вы хотите создать целочисленную очередь, используйте следующий код. Замените int на тип данных, который вы хотите.

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

Все остальное можно найти здесь .

...