我正在为离散数学设计一个类库,但我想不出一种方法来实现无限集。
到目前为止我所拥有的是:我有一个抽象基类 Set,它实现了 ISet 接口。对于有限集,我派生了一个类 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 方法.