因此,正如标题所解释的,我可以将每个偶数和奇数转换为相应的值,但对于数据输入,我有一个逗号。这就产生了额外的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并得到正确的答案。