相关疑难解决方法(0)

如何在Haskell中实现二进制数

我已经看到教会数字的以下数据构造函数

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的解决方案?如果有,怎么样?我尝试了很多,但似乎我的大脑无法摆脱列表或其他一些这样的结构的需要.

binary constructor haskell church-encoding

5
推荐指数
2
解决办法
1946
查看次数

标签 统计

binary ×1

church-encoding ×1

constructor ×1

haskell ×1