0

私はScheme言語の初心者なので、nビットの数値を受け取ってALUに入れる手続きを書くのに苦労しています。ALU は、1 ビット ALU を使用して構築されることになっています。

1 ビット ALU は次のとおりです。

(define ALU1
  (lambda (sel a b carry-in)
    (multiplexor4 sel
                  (cons (andgate a b) 0)
                  (cons (orgate a b) 0)
                  (cons (xorgate a b) 0)
                  (multiplexor2 sub
                                (full-adder a b carry-in)
                                (full-adder a (notgate b) carry-in)))))

これは、マルチプレクサと全加算器とともに機能します。

これは、n ビット ALU をシミュレートするためにいくつかの手順を使用する私の試みです。

(define ALU-helper
  (lambda (selection x1 x2 carry-in n)
    (if (= n 0)
        '()
        (ALU1 (selection x1 x2 carry-in)))))

(define ALUn
  (lambda (selection x1 x2 n)
    (ALU-helper (selection x1 x2 c n))))

そして、それが完了すると、「選択」に従って、2つのnビット数値を取り、それらを加算または減算などすることになっています。これは入力になります:

(define x1 '(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) )   
(define x2 '(1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1   1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) )
(ALUn 'add x1 x2 32)

そして、「選択」パラメーターが原因で発生しているように見えるエラーが実行時に発生します。すべてのパラメーターに混乱しているだけだと思いますが、問題を修正して ALU を機能させる方法がわかりません。Dr. Racket プログラム、言語 R5RS を使用してこれを実行しています。

4

1 に答える 1

0

ALU-helper 内の ALU1 への引数を括弧で囲むことにより、選択を関数として扱い、1 つの引数のみを ALU-helper に渡します。試す:

(ALU1 selection x1 x2 carry-in))))

ALUn での ALU-helper の呼び出しについても同じです。

于 2012-04-08T17:08:58.030 に答える