一个无穷可枚举的集合仍然被称为“可枚举”吗?

5

就像两条重叠的线段,我们可以找到无数个交点。枚举所有这些点可能没有意义,我们可能只想说明这个集合是无限的。

浮点数定义了NegativeInfinityPositiveInfinity。表示计数序数的数字似乎不需要使用浮点数,然而,整数未定义用于表示无穷大的东西。

因此,我尝试实现一个无限的可枚举。但是我突然对术语“可枚举”感到困惑...

是否有更好的方法来解决这个问题? 无限可枚举仍然可以被称为可枚举吗?

  • Code

    public partial class Infinity: IEnumerable<object> {
        IEnumerator<object> IEnumerable<object>.GetEnumerator() {
            for(; ; )
                yield return Infinity.Enumerable;
        }
    
        public IEnumerator GetEnumerator() {
            for(; ; )
                yield return Infinity.Enumerable;
        }
    
        public Infinity LongCount(
            Func<object, bool> predicate=default(Func<object, bool>)) {
            return Infinity.Enumerable;
        }
    
        public Infinity Count(
            Func<object, bool> predicate=default(Func<object, bool>)) {
            return Infinity.Enumerable;
        }
    
        public static readonly Infinity Enumerable=new Infinity();
    }
    

编辑:

谢谢您的回答。我并不混淆 IEnumerableIEnumerator。返回 Infinity.Enumerable 的原因是因为我不想声明额外的虚拟对象,比如:

static readonly object dummy=new object();

在GetEnumerator方法中使用yield return dummy。
2个回答

6
“无限可枚举”仍然是可枚举的吗?
在这里,“可枚举”是基于第二个枚举定义而言的:
“逐一列举”
它并不是指(在计算机之外更为常见的)定义,即“能够被计数”。
从这个意义上讲,无限序列绝对可以逐个列出,并且符合可枚举的条件。
话虽如此,在这个例子中,我并没有看到你代码的目的。无限枚举通常表示一个没有结束的数据流,或者其他没有“结束”,但有可能不断获取信息的来源。

4
在数学分析中,"可数的"和"可枚举的"都不意味着有限基数。参见http://mathworld.wolfram.com/CountablyInfinite.html。 - Ben Voigt
我实际上没有枚举它,而是为了表示某些东西:1)它是可枚举的;2)它是无限的数量(整数)。 - Ken Kin

5
正整数是无限的,并且明显可枚举(1、2、3,...)。即使在C#之外,该概念也是明确定义的。
然而,您的类存在问题,因为您混淆了IEnumerable和IEnumerator接口。GetEnumerator方法仅返回一个枚举器。那是无限的。
在C#中,实现无限IEnumerable的简单方法(作为方法而不是类)如下所示:
IEnumerable<int> Infinite() {
    int i = 1;
    while (true)
        yield return i++;
}

注意:在某个点上,int 会发生溢出。然而,默认情况下,C# 将简单地循环回负数。

3
溢出时的行为取决于它是否处于检查的上下文中,这可以在每个项目以及特定代码块中进行更改。 - Jon Skeet
@JonSkeet 确实。为了简单起见,我假设了默认值。 - Konrad Rudolph
我尝试的是使用某种东西来表示无限大,但我并没有枚举它.. - Ken Kin
@Ken 你不需要枚举它,但这很好地代表了无限。 - Konrad Rudolph
我正在标记当前得票更高的答案。这个答案也很有帮助,非常感谢。 - Ken Kin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接