3

我对 Scheme 还很陌生,正在尝试从头开始自己学习。我被困在这个问题的语法上。我知道如果我想知道一个数字是否是 2 的幂,例如在 C 中,我会简单地做:

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

这将返回真或假。我如何能够将其转换为 Scheme 中的几行简单的行?

4

3 回答 3

6

我会给你一个提示,因为你正在努力学习这门语言。

Scheme 有一个函数称为(bitwise-and ...),它等效&于 C 中的运算符(还有(bitwise-xor ...),(bitwise-not ..)等,它们可以做预期的事情)。

(这里是(bitwise-and ...)函数的文档)

鉴于此,您能否将您在问题中写的内容翻译成 Scheme 代码?

NB:对于这样的问题,你真的不需要在使用 Scheme 时使用按位运算。实际上,您应该编写一个(可能是尾)递归函数来为您计算它。

于 2009-11-04T16:48:20.107 回答
3

您可以使用内置的按位运算符来执行此操作。

(define (pow2? x)
  (= (bitwise-and x (- x 1))
     0))
于 2009-11-04T16:50:16.220 回答
1

Scheme 也有二元运算符

但是,如果您真的想提高您的计划技能,您应该编写一个函数,通过递归地将整数除以 2 直到剩下 2 或奇数,来确定整数是否是 2 的幂。这将非常低效,但仍然非常酷。

于 2009-11-04T16:49:04.077 回答