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

0 tree recursion haskell list nested-lists

所以当标题解释它时,我能够将每个偶数和奇数转换为它们对应的值,但是对于数据输入我有一个逗号.这创造了额外的L[].让我告诉你我的预期结果.

预期结果> 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))]
Run Code Online (Sandbox Code Playgroud)

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

jam*_*idh 5

记住,[a,b,c,d]是...的简写a:b:c:d:[]所以额外[]的来自额外的空数组.

你真正想要的是映射binariza到数组中的每个元素,你可以使用它map.

由于"我的解决方案必须是递归的"="这是作业",我不会向您显示实际的行,但您应该能够轻松地重写上述函数中的最后一个案例以使用map并获得正确的答案.