Я разрабатываю библиотеку классов для дискретной математики и не могу придумать, как реализовать бесконечный набор а>.
Что у меня есть до сих пор: у меня есть абстрактный базовый класс 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.
yield return
msdn.microsoft.com/en-us /библиотека/9k7k7cf0.aspx - person asawyer   schedule 26.07.2012yield return
. - person Michael Graczyk   schedule 26.07.2012