From e39d8ab92c394eddf865a3717f67dab0781d3506 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 15 Sep 2008 11:54:42 -0500 Subject: [PATCH] deques docs --- basis/deques/deques-docs.factor | 119 ++++++++++++++++++++++---------- 1 file changed, 83 insertions(+), 36 deletions(-) diff --git a/basis/deques/deques-docs.factor b/basis/deques/deques-docs.factor index 5a4b33887b..58f077ed1e 100644 --- a/basis/deques/deques-docs.factor +++ b/basis/deques/deques-docs.factor @@ -1,45 +1,29 @@ +USING: help.markup help.syntax kernel math sequences +quotations ; IN: deques -USING: help.markup help.syntax kernel ; - -ARTICLE: "deques" "Dequeues" -"A deque is a data structure with constant-time insertion and removal of elements at both ends. Dequeue operations are defined in the " { $vocab-link "deques" } " vocabulary." -$nl -"Dequeues must be instances of a mixin class:" -{ $subsection deque } -"Dequeues must implement a protocol." -$nl -"Querying the deque:" -{ $subsection peek-front } -{ $subsection peek-back } -{ $subsection deque-length } -{ $subsection deque-member? } -"Adding and removing elements:" -{ $subsection push-front* } -{ $subsection push-back* } -{ $subsection pop-front* } -{ $subsection pop-back* } -{ $subsection clear-deque } -"Working with node objects output by " { $link push-front* } " and " { $link push-back* } ":" -{ $subsection delete-node } -{ $subsection node-value } -"Utility operations built in terms of the above:" -{ $subsection deque-empty? } -{ $subsection push-front } -{ $subsection push-all-front } -{ $subsection push-back } -{ $subsection push-all-back } -{ $subsection pop-front } -{ $subsection pop-back } -{ $subsection slurp-deque } -"When using a deque as a queue, the convention is to queue elements with " { $link push-front } " and deque them with " { $link pop-back } "." ; - -ABOUT: "deques" HELP: deque-empty? -{ $values { "deque" { $link deque } } { "?" "a boolean" } } +{ $values { "deque" deque } { "?" "a boolean" } } { $description "Returns true if a deque is empty." } { $notes "This operation is O(1)." } ; +HELP: clear-deque +{ $values + { "deque" deque } } +{ $description "Removes all elements from a deque." } ; + +HELP: deque-length +{ $values + { "deque" deque } + { "n" integer } } +{ $description "Returns the number of elements in a deque." } ; + +HELP: deque-member? +{ $values + { "value" object } { "deque" deque } + { "?" "a boolean" } } +{ $description "Returns true if the " { $snippet "value" } " is found in the deque." } ; + HELP: push-front { $values { "obj" object } { "deque" deque } } { $description "Push the object onto the front of the deque." } @@ -60,6 +44,16 @@ HELP: push-back* { $description "Push the object onto the back of the deque and return the newly created node." } { $notes "This operation is O(1)." } ; +HELP: push-all-back +{ $values + { "seq" sequence } { "deque" deque } } +{ $description "Pushes a sequence of elements onto the back of a deque." } ; + +HELP: push-all-front +{ $values + { "seq" sequence } { "deque" deque } } +{ $description "Pushes a sequence of elements onto the front of a deque." } ; + HELP: peek-front { $values { "deque" deque } { "obj" object } } { $description "Returns the object at the front of the deque." } ; @@ -87,3 +81,56 @@ HELP: pop-back* { $values { "deque" deque } } { $description "Pop the object off the back of the deque." } { $notes "This operation is O(1)." } ; + +HELP: delete-node +{ $values + { "node" object } { "deque" deque } } +{ $description "Deletes the node from the deque." } ; + +HELP: deque +{ $description "A data structure that has constant-time insertion and removal of elements at both ends." } ; + +HELP: node-value +{ $values + { "node" object } + { "value" object } } +{ $description "Accesses the value stored at a node." } ; + +HELP: slurp-deque +{ $values + { "deque" deque } { "quot" quotation } } +{ $description "Pops off the back element of the deque and calls the quotation in a loop until the deque is empty." } ; + +ARTICLE: "deques" "Deques" +"The " { $vocab-link "deques" } " vocabulary implements the deque data structure which has constant-time insertion and removal of elements at both ends." +$nl +"Deques must be instances of a mixin class:" +{ $subsection deque } +"Deques must implement a protocol." +$nl +"Querying the deque:" +{ $subsection peek-front } +{ $subsection peek-back } +{ $subsection deque-length } +{ $subsection deque-member? } +"Adding and removing elements:" +{ $subsection push-front* } +{ $subsection push-back* } +{ $subsection pop-front* } +{ $subsection pop-back* } +{ $subsection clear-deque } +"Working with node objects output by " { $link push-front* } " and " { $link push-back* } ":" +{ $subsection delete-node } +{ $subsection node-value } +"Utility operations built in terms of the above:" +{ $subsection deque-empty? } +{ $subsection push-front } +{ $subsection push-all-front } +{ $subsection push-back } +{ $subsection push-all-back } +{ $subsection pop-front } +{ $subsection pop-back } +{ $subsection slurp-deque } +"When using a deque as a queue, the convention is to queue elements with " { $link push-front } " and deque them with " { $link pop-back } "." ; + +ABOUT: "deques"