【问题标题】:Is an infinite enumerable still "enumerable"?无限可枚举仍然是“可枚举的”吗?
【发布时间】:2013-05-18 04:26:01
【问题描述】:

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

浮点数已定义NegativeInfinityPositiveInfinity。表示 countordinal 的数字似乎不需要使用浮点数,但是,整数没有定义为表示无穷大。

所以我尝试实现一个无限可枚举。但是我突然对“可枚举”这个词感到困惑..

有没有更好的方法来解决这个问题?无限可枚举仍然可枚举吗?

  • 代码

    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 感到困惑。 GetEnumerator 方法返回 Infinity.Enumerable 是因为我确实想要声明一个额外的虚拟对象,例如:

static readonly object dummy=new object();

并在 GetEnumerator 方法中返回 dummy

【问题讨论】:

    标签: c# ienumerable terminology semantics


    【解决方案1】:

    无限可枚举仍然可枚举吗?

    在这个意义上,可枚举是基于第二个definition of enumerate

    一个接一个地指定

    它不是指(在计算之外更常见的)定义,它实际上意味着“能够被计算”。

    从这个意义上说,无限级数肯定可以一个接一个地列出,并且有资格作为一个可枚举的。

    话虽如此,我看不出此示例中您的代码背后的目的。无限可枚举通常表示诸如没有结束的数据流,或没有“结束”但有可能不断提取信息的其他来源。

    【讨论】:

    • 数学分析中的“可数”和“可数”都没有有限基数的内涵。 mathworld.wolfram.com/CountablyInfinite.html
    • 其实我不枚举,而是代表一个东西:1)是可枚举的; 2) 它是一个无穷大的量(整数)。
    【解决方案2】:

    正自然数是无限的并且可以清楚地枚举(1、2、3,...)。即使在 C# 之外,这个概念也得到了很好的定义。

    但是,您的课程存在问题,因为您混淆了 IEnumerableIEnumerator 接口。 GetEnumerator 方法仅返回 一个 枚举器。 是无限的。

    在 C# 中无限 IEnumerable 的简单实现(作为方法而不是类)如下所示:

    IEnumerable<int> Infinite() {
        int i = 1;
        while (true)
            yield return i++;
    }
    

    警告:int 有时会溢出。但是,默认情况下,C# 将简单地循环回负数。

    【讨论】:

    • 溢出的行为取决于它是否在检查的上下文中,可以根据每个项目以及专门针对代码块进行更改。
    • @JonSkeet 是的。为简单起见,我假设为默认值。
    • 我试图做的是用一些东西来表示无穷大,虽然我实际上并没有列举它..
    • @Ken 不用枚举,不过这个代表无穷大就好了。
    • 我正在标记当前投票率较高的答案。这个答案也很有帮助,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多