使用haskell整数到二进制

时间:2016-01-25 09:41:22

标签: haskell functional-programming binary

我遇到了这个函数的问题,我需要它给出一个数字的二进制形式作为4个元素的列表(从0到15) 所以例如对于输入0它应该给我[0,0,0,0],3:[0,0,1,1],15 [1,1,1,1] 这就是我做的事情

bin 0 x = []
bin n x = (mod x 2) : (bin (n-1) (div x 2))

它向后提供结果 而这:

bin 0 x = []
bin n x =  (bin (n-1) (div x 2)) ++ (mod x 2)

不起作用,编译时没有显示错误,但当我输入例如bin 4 1时,它显示:

"No instance fo ( Integral [t0]) arising from a use of 'it'
In a stmt of an interactive GHCi command : print it "

我无法弄清楚该怎么做,任何帮助都将受到赞赏

1 个答案:

答案 0 :(得分:4)

++有两个列表,mod x 2不是列表。你可以使用

... ++ [mod x 2]

但是,请注意,在列表末尾重复添加元素是效率低的,导致二次复杂度。

最好使用第一个向后生成位的片段,然后使用reverse重新排列末尾正向的位。这将提供线性复杂性。