我定义了二进制数的数据类型如下
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/