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