2008-04-14 03:20:37 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								USING:  kernel  help.markup  help.syntax  sequences  ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								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? }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								"Set operations on sequences:" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ $subsection diff }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ $subsection intersect }
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 06:19:26 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								{ $subsection union }
							 
						 
					
						
							
								
									
										
										
										
											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 }
							 
						 
					
						
							
								
									
										
										
										
											2008-04-14 06:19:26 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								{ $see-also member?  memq? contains? 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-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 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								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 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								HELP:  subset? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ $values { "seq1"  sequence  } { "seq2"  sequence  } { "?"  "a boolean"  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ $description "Tests if every element of "  { $snippet "seq1"  } " is contained in "  { $snippet "seq2"  } "."  } ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								HELP:  set= 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ $values { "seq1"  sequence  } { "seq2"  sequence  } { "?"  "a boolean"  } }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ $description "Tests if both sequences contain the same elements, disregrading order and duplicates."  } ;