我已经看到教会数字的以下数据构造函数
data Nat = Zero | Succ Nat deriving Show
Run Code Online (Sandbox Code Playgroud)
但这是一元数字.我们如何以这种方式在Haskell中实现二进制数的数据构造函数?
我试过这个:
data Bin = Zero | One | BinC [Bin] deriving Show
Run Code Online (Sandbox Code Playgroud)
在此之后,我们可以得到,十进制5编码为 BinC [One,Zero,One]
但我想我在这里遗漏了一些东西.我的解决方案似乎不像教会的解决方案那么聪明.毫不奇怪,我不是教会.一点点思考,我发现我的解决方案依赖于列表,而Nat不依赖于列表之类的任何外部结构.
我们是否可以使用Succ类型的二进制数构造函数编写类似于Church的解决方案?如果有,怎么样?我尝试了很多,但似乎我的大脑无法摆脱列表或其他一些这样的结构的需要.