Как использовать библиотеку очередей в SML / NJ
Вопрос
Я вижу, что SML / NJ включает структуру очереди. Я не могу понять, как его использовать. Как использовать дополнительные библиотеки, предоставляемые SML / NJ?
Решение
Структура 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 -
Вы можете открыть
структуру. Это позволяет избежать ввода 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 -
Другие советы
У меня нет полного ответа для вас, но я мог бы указать вам правильное направление. Вы должны искать с помощью менеджера компиляции (CM), который встроен в SML / NJ. Вы можете думать об этом как Make for SML.
Чтобы использовать библиотеку из библиотеки SML / NJ, необходимо добавить smlnj-lib.cm в файл описания CM вашего приложения. Затем вы можете использовать объявления, такие как Очередь из этой библиотеки.
На сайте smlnj есть некоторая документация о диспетчере компиляции .
Надеюсь, это, по крайней мере, направит вас в правильном направлении.
Если вы хотите создать целочисленную очередь, используйте следующий код. Замените 'int' на нужный вам тип данных.
val que = Queue.mkqueue(): int Queue.queue
Все остальное можно найти здесь.