我对Scheme很新,我试图从头开始自学。我坚持这个问题的语法。我知道如果我想知道一个数字是2的幂,例如在C中,我只会这样做:
return (x & (x - 1)) == 0;
将返回true或false。我怎样才能将它转换成Scheme中的一些简单的行?
答案 0 :(得分:6)
我会给你一个提示,因为你正试图学习这门语言。
Scheme有一个名为(bitwise-and ...)
的函数,它相当于C中的&
运算符(还有(bitwise-xor ...)
,(bitwise-not ..)
等,它们可以执行预期的操作)。
(这是(bitwise-and ...)
函数的文档)
鉴于此,您能否将您在问题中所写的内容翻译成Scheme代码?
N.B:对于这样的问题,在使用Scheme时,你真的不需要求助于按位运算。实际上,你应该写一个(可能可能是tail)递归函数,它将为你计算。
答案 1 :(得分:3)
您可以使用内置的按位运算符来执行此操作。
(define (pow2? x)
(= (bitwise-and x (- x 1))
0))
答案 2 :(得分:1)
Scheme也有biwise operators。
但是如果你真的想要开发你的方案技巧,你应该编写一个函数,通过递归地除以2直到你剩下2或奇数,来决定整数是2的幂。这将是非常低效的,但仍然非常酷。