This commit is contained in:
Ingy döt Net 2013-10-27 22:24:23 +00:00
parent 6f050a029e
commit 776bba907c
3887 changed files with 59894 additions and 7280 deletions

View file

@ -14,3 +14,5 @@ Show each of these set operations:
As an option, show some other set operations. (If A ⊆ B, but A ≠ B, then A is called a true or proper subset of B, written A ⊂ B or A ⊊ B.) As another option, show how to modify a mutable set.
One might implement a set using an [[associative array]] (with set elements as array keys and some dummy value as the values). One might also implement a set with a binary search tree, or with a hash table, or with an ordered array of binary bits (operated on with bitwise binary operators). The basic test, m ∈ S, is [[O]](n) with a sequential list of elements, O(''log'' n) with a balanced binary search tree, or (O(1) average-case, O(n) worst case) with a hash table.
{{Template:See also lists}}

View file

@ -0,0 +1,27 @@
using System.Console;
using Nemerle.Collections;
module RCSet
{
HasSubset[T](this super : Set[T], sub : Set[T]) : bool
{
super.ForAll(x => sub.Contains(x))
}
Main() : void
{
def names1 = Set(["Bob", "Billy", "Tom", "Dick", "Harry"]);
def names2 = Set(["Bob", "Mary", "Alice", "Louisa"]);
//def names3 = Set(["Bob", "Bob"]); // unfortunately, duplicated elements are not well handled by the stock
// implementation, this statement would throw an ArgumentException
def elem = names1.Contains("Bob"); // element test
def names1u2 = names1.Sum(names2); // union
def names1d2 = names1.Subtract(names2); // difference
def names1i2 = names1.Intersect(names2); // intersection
def same = names1.Equals(names2); // equality
def sub12 = names1.HasSubset(names2); // subset
WriteLine($"$names1u2\n$names1d2\n$names1i2");
WriteLine($"$same\t$sub12");
}
}