是否可以为有理数创建递归数据? 我看到这个是自然数
data Nat = Zero | Succ Nat
我可能需要使用两个数字作为比率?但零,Zero之类的东西不起作用。
谢谢!
答案 0 :(得分:7)
我们可以将它定义为:
data Nat0 = One | Succ0 Nat0
data Nat = Zero | Succ Nat
data PosRational = PosRational Nat Nat0
所以这里我们使用递归定义的两种数据类型Nat0
(不包括零)和Nat
(包括零),以及数据类型{{1}需要PosRational
和Nat
(所以分子和分母)。
我们还可以包括负有理数,例如通过定义:
Nat0
然后将我们的data Z = Pos Nat | Neg Nat0
定义为:
Rational
然而,我们实际上并不需要(因为我们不需要快速访问分子和分母)。 有理数是可数的。我们可以使用以下方案[source]枚举所有这些方案:
所以我们可以简单地将其定义为:
data Rational = Rational Z Nat0
基本上,每个可数集都可以使用这个定义,所以ℕ,ℤ,ℙ,ℚ等。