私は離散数学のクラスライブラリを設計していますが、無限集合を実装する方法を考えることはできません。
私がこれまでに持っているのは、インターフェイスISetを実装する抽象基本クラスSetがあります。有限集合の場合、各集合メソッドを実装するクラスFiniteSetを導出します。その後、次のように使用できます。
FiniteSet<int> set1 = new FiniteSet<int>(1, 2, 3);
FiniteSet<int> set2 = new FiniteSet<int>(3, 4, 5);
Console.WriteLine(set1); //{1, 2, 3}
Console.WriteLine(set2); //{3, 4, 5}
set1.UnionWith(set2);
Console.WriteLine(set1); //{1, 2, 3, 4, 5}
ここで、無限集合を表現したいと思います。セットから別の抽象クラスであるInfiniteSetを派生させるというアイデアがありました。その場合、ライブラリを使用する開発者は、独自のクラスを実装するためにInfiniteSetから派生する必要があります。N、Z、Q、Rなどの一般的に使用されるセットを提供します。
しかし、SubsetやGetEnumeratorなどのメソッドをどのように実装するのかわかりません。不可能だとさえ考え始めています。無限集合を実際的な方法で列挙して、別の無限集合と交差/結合できるようにするにはどうすればよいですか?コードで、NがRのサブセットであることをどのように確認できますか?そして、カーディナリティの問題に関しては..まあ、それはおそらく別の質問です。
これらすべてから、無限集合を実装するという私の考えはおそらく間違った方法であるという結論に至ります。ご意見をいただければ幸いです:)。
編集:明確にするために、私はまた、数え切れないほどの無限集合を表現したいと思います。
Edit2:最終的な目標はISetを実装することであるということを覚えておくことが重要だと思います。つまり、どのソリューションでもISetのすべてのメソッドを実装する方法を提供する必要があります。最も問題となるのは列挙メソッドとIsSubsetOfメソッドです。 。