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)
注意:我的解决方案必须是递归的.
记住,[a,b,c,d]是...的简写a:b:c:d:[]所以额外[]的来自额外的空数组.
你真正想要的是映射binariza到数组中的每个元素,你可以使用它map.
由于"我的解决方案必须是递归的"="这是作业",我不会向您显示实际的行,但您应该能够轻松地重写上述函数中的最后一个案例以使用map并获得正确的答案.