是否可以创建具有有理数的递归数据类型,如 - >数据Nat =零| Succ Nat?

时间:2017-11-23 16:03:38

标签: haskell recursion

是否可以为有理数创建递归数据? 我看到这个是自然数

data Nat = Zero | Succ Nat

我可能需要使用两个数字作为比率?但零,Zero之类的东西不起作用。

谢谢!

1 个答案:

答案 0 :(得分:7)

正有理数

我们可以将它定义为:

data Nat0 = One | Succ0 Nat0
data Nat = Zero | Succ Nat
data PosRational = PosRational Nat Nat0

所以这里我们使用递归定义的两种数据类型Nat0不包括零)和Nat(包括零),以及数据类型{{1}需要PosRationalNat(所以分子和分母)。

包括负有理数

我们还可以包括负有理数,例如通过定义:

Nat0

然后将我们的data Z = Pos Nat | Neg Nat0 定义为:

Rational

Count

的可数性

然而,我们实际上并不需要(因为我们不需要快速访问分子和分母)。 有理数是可数的。我们可以使用以下方案[source]枚举所有这些方案:

countability of rational numbers

所以我们可以简单地将其定义为:

data Rational = Rational Z Nat0

基本上,每个可数集都可以使用这个定义,所以ℕ,ℤ,ℙ,ℚ等。