我遇到了这个函数的问题,我需要它给出一个数字的二进制形式作为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 "
我无法弄清楚该怎么做,任何帮助都将受到赞赏
答案 0 :(得分:4)
++
有两个列表,mod x 2
不是列表。你可以使用
... ++ [mod x 2]
但是,请注意,在列表末尾重复添加元素是效率低的,导致二次复杂度。
最好使用第一个向后生成位的片段,然后使用reverse
重新排列末尾正向的位。这将提供线性复杂性。