是否可以为有理数创建递归数据? 我看到了这个自然数
data Nat = Zero | Succ Nat
我可能需要使用两个数字来表示比率?但是像“零,零”这样的东西不起作用。
谢谢!
最佳答案
正有理数
我们可以这样定义它:
data Nat0 = One | Succ0 Nat0
data Nat = Zero | Succ Nat
data PosRational = PosRational Nat Nat0
所以这里我们使用递归定义的两种数据类型Nat0
(排除零)和Nat
(包括零),以及一个数据类型 PosRational
,采用 Nat
和 Nat0
(因此是分子和分母)。
包括负有理数
我们还可以包含负有理数,例如通过定义:
data Z = Pos Nat | Neg Nat0
然后将我们的Rational
定义为:
data Rational = Rational Z Nat0
ℚ的可数性
尽管如此,我们实际上并不需要它(假设我们不需要快速访问分子和分母)。 有理数是可数的。我们可以使用以下方案枚举所有这些 [source] :
所以我们可以简单地将其定义为:
data Rational = Zero | NextRational Rational
基本上,每个可数集都可以使用这个定义,所以 ℕ、ℤ、ℙ、ℚ 等
关于haskell - 是否可以使用有理数创建递归数据类型,例如 -> data Nat = Zero |苏克纳特?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47459487/