将列表中的偶数转换为1,将赔率转换为0.逗号错误



因此,正如标题所解释的,我可以将每个偶数和奇数转换为相应的值,但对于数据输入,我有一个逗号。这就产生了额外的CCD_ 1。让我给你看看我的预期结果。

预期结果>binariza (L [E 1,L [E 2,E 3],E 4]) => L [E 0,L [E 1,E 0],E 1]

我的结果>binariza (L [E 1,L [E 2,E 3],E 4]) => L [E 0,L [L [E 1,L [E 0,L []]],L [E 1,L []]]]

这是我的代码,有人能告诉我如何避免每次发现逗号时都封装在L[]中吗。

data LA e = L [LA e] | E e deriving Show
binariza :: LA Integer -> LA Integer 
binariza (L[]) =  L[]
binariza (E num) =
     if (even num) then
        E 1
        else
            E 0
 binariza (L (x:resto)) =
     L [(binariza x), (binariza (L resto))]

注意:我的解决方案必须是递归的。

请记住,[a,b,c,d]a:b:c:d:[]的简写。。。。因此,额外的[]来自额外的空数组。

您真正想要的是将binariza映射到数组中的每个元素上,这可以使用map来完成。

由于"我的解决方案必须是递归的"="这是家庭作业",我不会给你看实际的行,但你应该能够很容易地重写上面函数中的最后一个案例,使用L[]0并得到正确的答案。

最新更新