第一个函数“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)
答案 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]