2008-09-15 12:54:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								USING:  help.markup  help.syntax  kernel  math  sequences  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								quotations ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-19 15:06:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								IN:  deques  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  deque-empty?  
						 
					
						
							
								
									
										
										
										
											2008-09-15 12:54:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $values { "deque"  deque } { "?"  "a boolean"  } }
							 
						 
					
						
							
								
									
										
										
										
											2008-11-16 06:53:25 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $contract "Returns true if a deque is empty."  }
							 
						 
					
						
							
								
									
										
										
										
											2008-08-19 15:06:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{ $notes "This operation is O(1)."  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-09-15 12:54:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								HELP:  clear-deque  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     { "deque"  deque } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Removes all elements from a deque."  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  deque-member?  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     { "value"  object  } { "deque"  deque }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     { "?"  "a boolean"  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Returns true if the "  { $snippet "value"  } " is found in the deque."  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-08-19 15:06:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								HELP:  push-front  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "obj"  object  } { "deque"  deque } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Push the object onto the front of the deque."  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $notes "This operation is O(1)."  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  push-front*  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "obj"  object  } { "deque"  deque } { "node"  "a node"  } }
							 
						 
					
						
							
								
									
										
										
										
											2008-11-16 06:53:25 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $contract "Push the object onto the front of the deque and return the newly created node."  } 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-19 15:06:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{ $notes "This operation is O(1)."  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  push-back  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "obj"  object  } { "deque"  deque } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Push the object onto the back of the deque."  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $notes "This operation is O(1)."  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  push-back*  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "obj"  object  } { "deque"  deque } { "node"  "a node"  } }
							 
						 
					
						
							
								
									
										
										
										
											2008-11-16 06:53:25 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $contract "Push the object onto the back of the deque and return the newly created node."  } 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-19 15:06:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{ $notes "This operation is O(1)."  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-09-15 12:54:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								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."  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-08-19 15:06:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								HELP:  peek-front  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "deque"  deque } { "obj"  object  } }
							 
						 
					
						
							
								
									
										
										
										
											2008-11-16 06:53:25 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $contract "Returns the object at the front of the deque."  } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-19 15:06:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  pop-front  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "deque"  deque } { "obj"  object  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Pop the object off the front of the deque and return the object."  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $notes "This operation is O(1)."  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  pop-front*  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "deque"  deque } }
							 
						 
					
						
							
								
									
										
										
										
											2008-11-16 06:53:25 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $contract "Pop the object off the front of the deque."  }
							 
						 
					
						
							
								
									
										
										
										
											2008-08-19 15:06:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{ $notes "This operation is O(1)."  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  peek-back  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "deque"  deque } { "obj"  object  } }
							 
						 
					
						
							
								
									
										
										
										
											2008-11-16 06:53:25 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $contract "Returns the object at the back of the deque."  } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-19 15:06:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  pop-back  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "deque"  deque } { "obj"  object  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Pop the object off the back of the deque and return the object."  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $notes "This operation is O(1)."  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  pop-back*  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "deque"  deque } }
							 
						 
					
						
							
								
									
										
										
										
											2008-11-16 06:53:25 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $contract "Pop the object off the back of the deque."  }
							 
						 
					
						
							
								
									
										
										
										
											2008-08-19 15:06:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{ $notes "This operation is O(1)."  } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-15 12:54:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  delete-node  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     { "node"  object  } { "deque"  deque } }
							 
						 
					
						
							
								
									
										
										
										
											2008-11-16 06:53:25 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $contract "Deletes the node from the deque."  } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-15 12:54:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								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 }
							 
						 
					
						
							
								
									
										
										
										
											2008-11-16 06:53:25 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $subsection deque-empty? }
							 
						 
					
						
							
								
									
										
										
										
											2008-09-15 12:54:42 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $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 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"