我需要一些帮助来实现一个接收数字的函数,并返回为了表示二进制基数中的输入数而需要“打开”的位数。 例如,数字5以二进制表示为101,因此需要两个位“开启”。
实施例: (numOfBitsOn 5)将返回2,因为二进制中的5是101 (numOfBitsOn 101)将返回4,因为二进制101是1100101
这是第一次学习Scheme。到目前为止,这就是我写的所有内容:
(define (numOfBitsOn number)
(define (numOfBitsOn-2 number acc)
(cond ((eq? number 0)acc)
(not(eq? (modulo number 2)0) (+ acc 1))
(numOfBitsOn-2 (/ number 2) acc))))
它给了我:
begin (possibly implicit): no expression after a sequence of internal definitions in: (begin (define (numofbitson-2 number acc) (cond ((eq? number 0) acc) (not (eq? (modulo number 2) 0) (+ acc 1)) (numofbitson-2 (number) acc))))
我确定它甚至不接近解决方案= \
你能帮帮我吗? 谢谢!答案 0 :(得分:1)
(define (slow-popcount n)
(do ((n n (quotient n 2))
(count 0 (+ count (modulo n 2))))
((zero? n) count)))