haskell - 在 Haskell 中反转二进制数

标签 haskell

我定义了二进制数的数据类型如下

data Bin = Nil | O Bin | I Bin 
           deriving (Show, Eq)

我想定义一个函数 reverse::Bin -> Bin 这样当我像这样输入时

reverse (I (O (I (I Nil)))) 我应该得到输出 I (I (O (I Nil))) 这意味着反转为输入,任何人请给我提示我如何才能做到这一点?

最佳答案

你为什么要这样做?为什么不是这样的:

data Bit = I | O
newtype Bin = List Bit

那你直接用Prelude的反操作就可以了...

编辑 Prelude 函数的简单替换:

reverse x = rev x []
  where
    rev [] a = a
    rev (x:xs) a = rev xs (x:a)

产量:

reverse x = rev x Nil
  where
    rev Nil a = a
    rev (I xs) a = rev xs (I a)
    rev (O xs) a = rev xs (O a)

问题是,您的类型与列表类型非常相似:

data List a = a : (List a) | []

因此 List 例程的逻辑直接适用于您的类型。

关于haskell - 在 Haskell 中反转二进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1897876/

相关文章:

string - 将字符串转换为数字并打印到命令行

haskell - 循环一元谓词

haskell - 秒差距:回溯不起作用

具有参数类型的 Haskell 类型类

haskell - 为什么什么都没有>> Haskell 中只有 3 什么都不是?

dictionary - 实现 mapTree 功能

haskell - 创建 Haskell 实例声明

haskell - 逐步推导类型

haskell - 在 Haskell 中为记录的总和类型派生 Enum

haskell - Haskell 中的引用透明度困惑