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 回答