2008-09-17 01:49:55 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								USING:  kernel  help.markup  help.syntax  sequences  quotations  ;
  
						 
					
						
							
								
									
										
										
										
											2008-04-14 03:20:37 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								IN:  sets  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 06:19:26 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								ARTICLE: "sets"  "Set-theoretic operations on sequences" 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-01 21:01:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"Set-theoretic operations on sequences are defined on the "  { $vocab-link "sets"  } " vocabulary. All of these operations use hashtables internally to achieve linear running time."  
						 
					
						
							
								
									
										
										
										
											2008-04-14 06:19:26 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								$nl
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 03:20:37 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								"Remove duplicates:"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $subsection prune }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"Test for duplicates:"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $subsection all-unique? }
							 
						 
					
						
							
								
									
										
										
										
											2008-07-13 21:46:41 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $subsection duplicates }
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 03:20:37 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								"Set operations on sequences:"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $subsection diff }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $subsection intersect }
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 06:19:26 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $subsection union }
							 
						 
					
						
							
								
									
										
										
										
											2009-01-12 02:51:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"Set-theoretic predicates:"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $subsection intersects? }
							 
						 
					
						
							
								
									
										
										
										
											2008-05-01 21:01:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $subsection subset? }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $subsection set= }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"A word used to implement the above:"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $subsection unique }
							 
						 
					
						
							
								
									
										
										
										
											2008-05-25 20:44:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"Adding elements to sets:"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $subsection adjoin }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $subsection conjoin }
							 
						 
					
						
							
								
									
										
										
										
											2009-01-29 23:19:07 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $see-also member?  memq? any?  all?  "assocs-sets"  } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 03:20:37 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-05-01 21:01:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								ABOUT: "sets" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-05-25 20:44:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								HELP:  adjoin  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "elt"  object  } { "seq"  "a resizable mutable sequence"  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Removes all elements equal to "  { $snippet "elt"  } ", and adds "  { $snippet "elt"  } " at the end of the sequence."  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $examples
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { $example
							 
						 
					
						
							
								
									
										
										
										
											2008-05-29 03:47:30 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        "USING: namespaces prettyprint sets ;" 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-25 20:44:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        "V{ \"beans\" \"salsa\" \"cheese\" } \"v\" set" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        "\"nachos\" \"v\" get adjoin" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        "\"salsa\" \"v\" get adjoin" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        "\"v\" get ." 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        "V{ \"beans\" \"cheese\" \"nachos\" \"salsa\" }" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $side-effects "seq"  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-12 21:56:44 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								HELP:  conjoin  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "elt"  object  } { "assoc"  "an assoc"  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Stores a key/value pair, both equal to "  { $snippet "elt"  } ", into the assoc."  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $examples
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { $example
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        "USING: kernel prettyprint sets ;" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        "H{ } clone 1 over conjoin ." 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        "H{ { 1 1 } }" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $side-effects "assoc"  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 03:20:37 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								HELP:  unique  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "seq"  "a sequence"  } { "assoc"  "an assoc"  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Outputs a new assoc where the keys and values are equal."  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $examples
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { $example "USING: sets prettyprint ;"  "{ 1 1 2 2 3 3 } unique ."  "H{ { 1 1 } { 2 2 } { 3 3 } }"  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  prune  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "seq"  "a sequence"  } { "newseq"  "a sequence"  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Outputs a new sequence with each distinct element of "  { $snippet "seq"  } " appearing only once. Elements are compared for equality using "  { $link =  } " and elements are ordered according to their position in "  { $snippet "seq"  } "."  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $examples
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 08:53:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { $example "USING: sets prettyprint ;"  "{ 1 1 t 3 t } prune ."  "V{ 1 t 3 }"  }
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 03:20:37 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								} ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-13 21:46:41 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								HELP:  duplicates  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "seq"  "a sequence"  } { "newseq"  "a sequence"  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Outputs a new sequence consisting of elements which occur more than once in "  { $snippet "seq"  } "."  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $examples
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { $example "USING: sets prettyprint ;"  "{ 1 2 3 1 2 1 } duplicates ."  "{ 1 2 1 }"  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 03:20:37 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								HELP:  all-unique?  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "seq"  sequence  } { "?"  "a boolean"  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Tests whether a sequence contains any repeated elements."  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $example
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 08:53:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    "USING: sets prettyprint ;" 
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 03:20:37 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    "{ 0 1 1 2 3 5 } all-unique? ." 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    "f" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  diff  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "seq1"  sequence  } { "seq2"  sequence  } { "newseq"  sequence  } }
							 
						 
					
						
							
								
									
										
										
										
											2008-04-26 03:01:06 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $description "Outputs a sequence consisting of elements present in "  { $snippet "seq1"  } " but not "  { $snippet "seq2"  } ", comparing elements for equality."  
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 03:20:37 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								} { $examples
							 
						 
					
						
							
								
									
										
										
										
											2008-04-26 03:01:06 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { $example "USING: sets prettyprint ;"  "{ 1 2 3 } { 2 3 4 } diff ."  "{ 1 }"  }
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 03:20:37 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								} ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  intersect  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "seq1"  sequence  } { "seq2"  sequence  } { "newseq"  sequence  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Outputs a sequence consisting of elements present in both "  { $snippet "seq1"  } " and "  { $snippet "seq2"  } "."  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $examples
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 08:53:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { $example "USING: sets prettyprint ;"  "{ 1 2 3 } { 2 3 4 } intersect ."  "{ 2 3 }"  }
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 03:20:37 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								} ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  union  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "seq1"  sequence  } { "seq2"  sequence  } { "newseq"  sequence  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Outputs a sequence consisting of elements present in "  { $snippet "seq1"  } " and "  { $snippet "seq2"  } " which does not contain duplicate values."  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $examples
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 08:53:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { $example "USING: sets prettyprint ;"  "{ 1 2 3 } { 2 3 4 } union ."  "V{ 1 2 3 4 }"  }
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 03:20:37 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								} ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 03:40:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ diff intersect union } related-words
							 
						 
					
						
							
								
									
										
										
										
											2008-05-01 21:01:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-01-12 02:51:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								HELP:  intersects?  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "seq1"  sequence  } { "seq2"  sequence  } { "?"  "a boolean"  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Tests if "  { $snippet "seq1"  } " and "  { $snippet "seq2"  } " have any elements in common."  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $notes "If one of the sequences is empty, the result is always "  { $link f  } "."  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-05-01 21:01:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								HELP:  subset?  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "seq1"  sequence  } { "seq2"  sequence  } { "?"  "a boolean"  } }
							 
						 
					
						
							
								
									
										
										
										
											2009-01-12 02:51:38 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ $description "Tests if every element of "  { $snippet "seq1"  } " is contained in "  { $snippet "seq2"  } "."  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $notes "If "  { $snippet "seq1"  } " is empty, the result is always "  { $link t  } "."  } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-01 21:01:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  set=  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values { "seq1"  sequence  } { "seq2"  sequence  } { "?"  "a boolean"  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Tests if both sequences contain the same elements, disregrading order and duplicates."  } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-17 01:49:55 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								HELP:  gather  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $values
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     { "seq"  sequence  } { "quot"  quotation }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     { "newseq"  sequence  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ $description "Maps a quotation onto a sequence, concatenates the results of the mapping, and removes duplicates."  } ;