2

私はスキームにかなり慣れていません。10 進数から 2 進数に変換する方法は知っていますが、逆に変換するロジックは思いつきません。2進数のリストから10進数を取得したい。

小数の例:

(decimal '(1 0 1)) ---> 5

16 進数の例:

(hexadecimal '(1 0 0 0 1)) ----> 12

これまでのところ、リストの最後の数字を 2 iで再帰的に乗算することで実行できると思います。ここで、i はリスト内の位置を表し、最後の数字に 1 を掛け、次の数字に 2 を掛けます。最後に、再帰サイクルごとにこれらの数値を追加します。このアイデアを実行する方法も、うまくいくかどうかもわかりません。

4

4 に答える 4

0

あなたが書いたソリューションの説明は正しいです。必要なのは、それを実行することだけです。いくつかのポインタ:

  • リストを逆にすると、ロジックははるかに簡単になります
  • 各桁の重みと累積合計を引数として再帰関数に渡すと、より簡単になります

あなたは正しい道を進んでいます — がんばってください。疑似コードを試すと、より明確になる場合があります。

于 2012-10-05T03:05:51.697 に答える
0
(defun bin-list-to-dec (lst)
  (reduce (lambda (x y) (+ (* x 2) y)) lst))
于 2012-12-22T07:12:08.657 に答える