私は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 を使用してこれを実行しています。