Haskell中的Peano自然数定义为data Peano = Zero | Succ Peano data Peano = Zero | Succ Peano是相当奇怪的野兽:除了简单的自然和底价之外,还有一个“无限整数” inf = Succ inf

Peano型还有其他居民吗? 这个无限号码有名字吗?

===============>>#1 票数:17 已采纳

他们并不陌生,他们只是coinductive土黄。 抛开⊥的问题,我们可以将此处的自然数类型定义为由ZeroSucc应用于自然数组成。 归纳定义将假设一个明确定义的结束,即任何数字都从Zero构造函数开始。 coinductive定义仅表示给定任何自然数,它将Zero或我们可以移除外部Succ以获得另一个自然数。

看似微妙的区别在于,coinductive定义包括一系列无穷无尽的Succ构造函数,它们实际上是无穷大的真实表现。 这是有意义的,因为虽然归纳定义是关于确保递归将达到明确定义的基本情况,但是共同定义是关于确保总是有明确定义的下一步可用。

由于数据构造函数是懒惰的,因此在Haskell中,coinductive解释很方便并且在某些方面是强制性的。

所以,这个无穷大的数字实际上是无穷大,或ω,如果你需要指定哪个无限,正如Daniel Fischer所说。 它只是一个共鸣无限,就像更常见的无限列表一样。

如果你通过他们的教会编码来考虑自然数,有限数字意味着“迭代这个函数N次”; ω表示“无限期地迭代此函数”。

===============>>#2 票数:10

好吧,有Succ _|_Succ (Succ _|_)等等。你可能已经包含了那些“底价值”。 inf = Succ inf通常称为infinityomega (作为自然数的序数)。

  ask by nponeccop translate from so

未解决问题?本站智能推荐:

2回复

Haskell将整数转换为Int?

是否可以将Integer转换为Int? 另一个方向是可能的:toInteger。 我知道Integer能够存储更大的值,但有时需要使用std-lib函数进行对话。 我试过(n :: Int)和我找到的其他代码示例 - 但没有任何作用。
4回复

Haskell:对Double类型的约束函数仅适用于整数

假设我正在编写一个获取整数列表的函数,并仅返回列表中小于5.2的整数。 我可能会这样做: 够容易吧? 但是现在我想将这个函数限制为只使用类型为[Int]的输入列表,这是出于我自己的设计原因。 这似乎是一个合理的要求。 唉,没有。 一个声明,限制类型如下: 导致类型错误。
2回复

Haskell中的类型错误

从本教程开始的过去几个小时里,我确实开始学习haskell。 尝试编译以下代码时,我不断收到Couldn't match type错误: 这是错误: 我已经搜索了几个小时,试图了解该问题,但是没有任何线索。 为什么ages ++ [age2]期望使用IO Int类型? 以及
2回复

Haskell类型和签名

我正在学习关于Haskell的考试。 我不明白我如何确定函数的类型。 功能是: 我的猜测是第一行有这样的类型: empty list -> a -> a其中a必须是数字类型。 在Haskell表示法中Num a => [] -> a -> a和第二行有
3回复

在Haskell的分部,仍然没有得到它

我仍然不理解Haskell中的划分。 我的第一个目的是定义一个这样的函数: 它不起作用。 然后,使用签名: 但它再次引发了“无法演绎”错误。 如果我在解释器中运行此代码以找出最佳签名,结果是: 引发“类型变量`a0'是模糊的”错误。 现在,我能想到的唯一计
3回复

在Haskell中使用自然数是否有实用的方法?

我正在学习Haskell,并希望在一些构造函数中强制使用正整数(1,2,3,...),但我似乎只能找到'Int'和'Integer'数据类型。 我可以使用规范 但后来我不能用1,4,......来表示它们。 所以我问,有没有办法实现这个目标? (就像在C中使用'unsign
4回复

在Haskell中获取数字除数列表的问题

这不是一个重复的问题 。 参见下文... 我正在声明以下功能: 我想要获得的是x的除数:包含(n, k)的元组列表,例如n * k = x 例: 为什么上面的代码不起作用? 它给了我错误: 我试过手动设置功能的签名但没有成功...
3回复

Haskell 64位数字类型

我在Haskell中编写一个函数来处理超过32位int的数字。 我找不到这种类型,我似乎在寻找错误的术语。 它需要能够保持大约2 ^ 40的数字,而不会损失任何精度 例:
2回复

在Haskell中,如何强制表达式为函数的返回类型?

我想将此函数概括为(Integral a, Integral b, Bounded b) => a -> [b] maxBound (Integral a, Integral b, Bounded b) => a -> [b]但是我不知道如何强制maxBound具有结果的
1回复

在Haskell中可疑的'Int'与'Integer'处理?

只是为了踢,我想看看如果我在Haskell中将函数定义为Int -> Int会发生什么,知道它会溢出并且必须返回一个Integer 。 考虑以下: 现在我知道如果我运行factorial 50 ,我将得到一个在factorial的'codomain'之外的数字。 由于Haske