我对 Scheme 还很陌生,正在尝试从头开始自己学习。我被困在这个问题的语法上。我知道如果我想知道一个数字是否是 2 的幂,例如在 C 中,我会简单地做:
return (x & (x - 1)) == 0;
这将返回真或假。我如何能够将其转换为 Scheme 中的几行简单的行?
我对 Scheme 还很陌生,正在尝试从头开始自己学习。我被困在这个问题的语法上。我知道如果我想知道一个数字是否是 2 的幂,例如在 C 中,我会简单地做:
return (x & (x - 1)) == 0;
这将返回真或假。我如何能够将其转换为 Scheme 中的几行简单的行?
我会给你一个提示,因为你正在努力学习这门语言。
Scheme 有一个函数称为(bitwise-and ...)
,它等效&
于 C 中的运算符(还有(bitwise-xor ...)
,(bitwise-not ..)
等,它们可以做预期的事情)。
(这里是(bitwise-and ...)
函数的文档)
鉴于此,您能否将您在问题中写的内容翻译成 Scheme 代码?
NB:对于这样的问题,你真的不需要在使用 Scheme 时使用按位运算。实际上,您应该编写一个(可能是尾)递归函数来为您计算它。
您可以使用内置的按位运算符来执行此操作。
(define (pow2? x)
(= (bitwise-and x (- x 1))
0))
Scheme 也有二元运算符。
但是,如果您真的想提高您的计划技能,您应该编写一个函数,通过递归地将整数除以 2 直到剩下 2 或奇数,来确定整数是否是 2 的幂。这将非常低效,但仍然非常酷。