78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Factor
		
	
	
|  | USING: help.markup help.syntax kernel ;
 | ||
|  | IN: queues | ||
|  | 
 | ||
|  | ARTICLE: "queues" "Queues" | ||
|  | "Last-in-first-out queues are defined in the " { $vocab-link "queues" } " vocabulary." | ||
|  | $nl | ||
|  | "Queues are a class." | ||
|  | { $subsection queue } | ||
|  | { $subsection queue? } | ||
|  | { $subsection <queue> } | ||
|  | "Testing queues:" | ||
|  | { $subsection queue-empty? } | ||
|  | "Adding elements:" | ||
|  | { $subsection deque } | ||
|  | "Removing elements:" | ||
|  | { $subsection enque } | ||
|  | { $subsection clear-queue } | ||
|  | { $subsection queue-each } | ||
|  | "An example:" | ||
|  | { $code | ||
|  |     "<queue> \"q\" set" | ||
|  |     "5 \"q\" get enque" | ||
|  |     "3 \"q\" get enque" | ||
|  |     "7 \"q\" get enque" | ||
|  |     "\"q\" get deque ." | ||
|  |     "  5" | ||
|  |     "\"q\" get deque ." | ||
|  |     "  3" | ||
|  |     "\"q\" get deque ." | ||
|  |     "  7" | ||
|  | } ;
 | ||
|  | 
 | ||
|  | ABOUT: "queues" | ||
|  | 
 | ||
|  | HELP: queue | ||
|  | { $class-description "A simple first-in-first-out queue. See " { $link "queues" } "." } ;
 | ||
|  | 
 | ||
|  | HELP: entry | ||
|  | { $class-description "The class of entries in a " { $link queue } ". Each entry holds an object and a reference to the next entry." } ;
 | ||
|  | 
 | ||
|  | HELP: <entry> | ||
|  | { $values { "obj" object } { "entry" entry } } | ||
|  | { $description "Creates a new queue entry." } | ||
|  | { $notes "This word is a factor of " { $link enque } "." } ;
 | ||
|  | 
 | ||
|  | HELP: <queue> | ||
|  | { $values { "queue" queue } } | ||
|  | { $description "Makes a new queue with no elements." } ;
 | ||
|  | 
 | ||
|  | HELP: queue-empty? | ||
|  | { $values { "queue" queue } { "?" "a boolean" } } | ||
|  | { $description "Tests if a queue contains no elements." } ;
 | ||
|  | 
 | ||
|  | HELP: deque | ||
|  | { $values { "queue" queue } { "elt" object } } | ||
|  | { $description "Removes an element from the front of the queue." } | ||
|  | { $errors "Throws an " { $link empty-queue-error } " if the queue has no entries." } | ||
|  | { $side-effects "queue" } ;
 | ||
|  | 
 | ||
|  | HELP: enque | ||
|  | { $values { "elt" object } { "queue" queue } } | ||
|  | { $description "Adds an element to the back of the queue." } | ||
|  | { $side-effects "queue" } ;
 | ||
|  | 
 | ||
|  | HELP: empty-queue-error | ||
|  | { $description "Throws an " { $link empty-queue-error } "." } | ||
|  | { $error-description "Thrown by " { $link deque } " if the queue has no entries." } ;
 | ||
|  | 
 | ||
|  | HELP: clear-queue | ||
|  | { $values { "queue" queue } } | ||
|  | { $description "Removes all entries from the queue." } | ||
|  | { $side-effects "queue" } ;
 | ||
|  | 
 | ||
|  | HELP: queue-each | ||
|  | { $values { "queue" queue } { "quot" "a quotation with stack effect " { $snippet "( obj -- )" } } } | ||
|  | { $description "Applies the quotation to each entry in the queue, starting from the least recently added entry, clearing the queue in the process." } | ||
|  | { $side-effects "queue" } ;
 |