查找一个数字是否是Scheme中2的幂

时间:2009-11-04 16:42:03

标签: scheme bitwise-operators

我对Scheme很新,我试图从头开始自学。我坚持这个问题的语法。我知道如果我想知道一个数字是2的幂,例如在C中,我只会这样做:

return (x & (x - 1)) == 0;

将返回true或false。我怎样才能将它转换成Scheme中的一些简单的行?

3 个答案:

答案 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的幂。这将是非常低效的,但仍然非常酷。