⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queue.mldoc

📁 这是我们参加06年全国开源软件的竞赛作品
💻 MLDOC
字号:
<!-- queue.mldoc --><!-- Entities.sgml entry <!ENTITY Queue SDATA "queue-sig.sml"> --><!DOCTYPE ML-DOC SYSTEM><COPYRIGHT OWNER="Bell Labs, Lucent Technologies" YEAR=1998><VERSION VERID="1.0" YEAR=1998 MONTH=5 DAY=14><TITLE>The Queue structure</TITLE><INTERFACE><HEAD>The <CD/Queue/ structure</HEAD><SEEALSO>  <STRREF TOPID/Fifo/</SEEALSO><PP>The <STRREF NOLINK/Queue/ structure provides a simple implementationof mutable queues.The current implementation relies on the applicative queues definedin <STRREF NOLINK/Fifo/, and therefore has similar performance.<STRUCTURE STRID="Queue">  <SIGBODY SIGID="QUEUE" FILE=QUEUE>    <SPEC>      <TYPE><TYPARAM>'a<ID>queue    <SPEC>      <EXN>Dequeue    <SPEC>      <VAL>mkQueue<TY>unit -> 'a queue        <COMMENT>          <PROTOTY>          mkQueue <ARG/()/          </PROTOTY>          returns an empty queue.    <SPEC>      <VAL>clear<TY>'a queue -> unit        <COMMENT>          <PROTOTY>          clear <ARG/qu/          </PROTOTY>          removes all the elements in <ARG/qu/.    <SPEC>      <VAL>isEmpty<TY>'a queue -> bool        <COMMENT>          <PROTOTY>          isEmpty <ARG/qu/          </PROTOTY>          returns true if <ARG/qu/ is empty.    <SPEC>      <VAL>enqueue<TY>('a queue * 'a) -> unit        <COMMENT>          <PROTOTY>          enqueue (<ARG/qu/, <ARG/a/)          </PROTOTY>          appends <ARG/a/ to the end of <ARG/qu/.    <SPEC>      <VAL>dequeue<TY>'a queue -> 'a      <RAISES><EXNREF STRID="Queue"/Dequeue/        <COMMENT>          <PROTOTY>          dequeue <ARG/qu/          </PROTOTY>          removes and returns the head element in <ARG/qu/.          Raises the exception <EXNREF STRID="Queue"/Dequeue/          if <ARG/qu/ is empty.    <SPEC>      <VAL>delete<TY>('a queue * ('a -> bool)) -> unit        <COMMENT>          <PROTOTY>          delete (<ARG/qu/, <ARG/f/)          </PROTOTY>          deletes all elements in <ARG/qu/ satisfying the predicate <ARG/f/.    <SPEC>      <VAL>head<TY>'a queue -> 'a      <RAISES><EXNREF STRID="Queue"/Dequeue/        <COMMENT>          <PROTOTY>          head <ARG/qu/          </PROTOTY>          returns the head of <ARG/qu/ without removing it.          Raises the exception <EXNREF STRID="Queue"/Dequeue/          if <ARG/qu/ is empty.    <SPEC>      <VAL>peek<TY>'a queue -> 'a option        <COMMENT>          <PROTOTY>          peek <ARG/qu/          </PROTOTY>          returns the head of <ARG/qu/ if it exists; otherwise, returns          <CONREF STRID="Option" DOCUMENT=SML-BASIS-DOC/NONE/.    <SPEC>      <VAL>length<TY>'a queue -> int        <COMMENT>          <PROTOTY>          length <ARG/qu/          </PROTOTY>          returns the number of elements in <ARG/qu/. At present, this          is a linear time operation.    <SPEC>      <VAL>contents<TY>'a queue -> 'a list        <COMMENT>          <PROTOTY>          contents <ARG/qu/          </PROTOTY>          returns the elements in <ARG/qu/ in queue order. This          is a linear time operation.    <SPEC>      <VAL>app<TY>('a -> unit) -> 'a queue -> unit        <COMMENT>          <PROTOTY>          app <ARG/f/ <ARG/qu/          </PROTOTY>          applies the function <ARG/f/ to the elements in <ARG/qu/ in          queue order. This is equivalent to:          <CODE>            List.app f (contents qu)          </CODE>    <SPEC>      <VAL>map<TY>('a -> 'b) -> 'a queue -> 'b queue        <COMMENT>          <PROTOTY>          map <ARG/f/ <ARG/qu/          </PROTOTY>          creates a new queue by mapping the elements in <ARG/qu/ by          <ARG/f/. This is equivalent to:          <CODE>            let              val newq = mkQueue ()            in              app (fn v => enqueue(newq,f v)) qu;              newq            end          </CODE>    <SPEC>      <VAL>foldl<TY>(('a * 'b) -> 'b) -> 'b -> 'a queue -> 'b        <COMMENT>          <PROTOTY>          foldl <ARG/f/ <ARG/a/ <ARG/qu/          </PROTOTY>          folds the elements of the queue from the head to the tail.           This is equivalent to:          <CODE>            List.foldl f a (contents qu))          </CODE>    <SPEC>      <VAL>foldr<TY>(('a * 'b) -> 'b) -> 'b -> 'a queue -> 'b        <COMMENT>          <PROTOTY>          foldr <ARG/f/ <ARG/a/ <ARG/qu/          </PROTOTY>          folds the elements of the queue from the tail to the head.           This is equivalent to:          <CODE>            List.foldr f a (contents qu))          </CODE></STRUCTURE></INTERFACE>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -