数据构造函数和可能的工作

时间:2016-05-09 16:34:27

标签: haskell

第一个函数“encode”工作并获取Bool语句列表并将它们变为Is和Os。在函数“decode”中我应该将Is和Os再次解码为True和False。在解码函数中,我无法检查是否有任何元素不在数据位中,程序应该用Nothing来响应。

在解码中,否则保护Just(l xs)不会给我“Just [[False],[False],[True]]”for“decode [O,O,I]”它遗漏了第一位“只是[错],[真]”我不知道为什么会这样。

module Blueprint where
import Prelude
import Data.List
import Data.Maybe

data Bit = O | I  deriving (Eq, Show)

encode :: [[Bool]] -> [Bit]
encode [] = []
encode (x:xs) |x==[True]  = I : encode xs
          |otherwise  = O : encode xs

l :: [Bit] -> [[Bool]]
l [] = []
l (x:xs) |x==I =[True] : l xs
         |x==O =[False]: l xs

decode :: [Bit] -> Maybe [[Bool]]
decode xs |{-if anything is in the list that is not in data Bit-} = Nothing
              |otherwise = Just (l xs)

1 个答案:

答案 0 :(得分:3)

您的定义

data Bit = O | I

强制[Bit]只能拥有I/O。也许你只需要处理空列表情况?此外,将单个真/假值表示为单例列表很奇怪。为什么不使用Bool

我会将其简化为

encodeBit O = False
encodeBit I = True

decodeBit False = O
decodeBit True = I

> map encodeBit [O,O,I]
[False,False,True]

> map decodeBit it
[O,O,I]