3

私はSchemeにかなり慣れていないので、自分でゼロから学ぼうとしています。私はこの問題の構文に固執しています。たとえば、Cの場合、数値が2の累乗であるかどうかを知りたい場合は、次のようにします。

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

これはtrueまたはfalseを返します。これをSchemeでいくつかの単純な行に変換するにはどうすればよいですか?

4

3 に答える 3

6

あなたが言語を学ぼうとしているので、私はあなたにヒントを与えます。

スキームには、Cの演算子(bitwise-and ...)と同等のと呼ばれる関数があります(期待されることを行う、、などもあります)。&(bitwise-xor ...)(bitwise-not ..)

(ここに関数のドキュメントがあり(bitwise-and ...)ます)

それを踏まえて、質問に書き込んだ内容をスキームコードに変換できますか?

注意:このような問題の場合、Schemeを使用するときにビット演算に頼る必要はありません。現実的には、これを計算する(おそらくテールの)再帰関数を作成する必要があります

于 2009-11-04T16:48:20.107 に答える
3

これは、組み込みのビット演算子を使用して行うことができます。

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

スキームには、バイワイズ演算子もあります。

しかし、本当にスキームスキルを身に付けたい場合は、整数が2の累乗であるかどうかを、2または奇数が残るまで再帰的に2で割ることによって決定する関数を作成する必要があります。これは非常に非効率的ですが、それでも本当にクールです。

于 2009-11-04T16:49:04.077 に答える