Процедура ALU-n на схеме

Я новичок в языке схем, поэтому у меня возникли проблемы с написанием процедуры, которая принимает n-битное число и помещает его в ALU. Предполагается, что АЛУ будет построен с использованием 1-битного АЛУ.

Вот 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)

И я получаю ошибки при запуске, которые, кажется, происходят из-за параметра "selection". Я уверен, что меня просто сбивают с толку все параметры, но я не знаю, как исправить проблему и заставить ALU работать. Я запускаю это с помощью программы Dr.Racket, язык R5RS.


person aclark    schedule 08.04.2012    source источник
comment
Какие ошибки вы получаете? вы должны опубликовать все соответствующие процедуры в своем вопросе (multiplexor4, multiplexor2, full-adder и т. д.), чтобы сделать его SSCCE.   -  person Óscar López    schedule 08.04.2012


Ответы (1)


Помещая аргументы ALU1 внутри ALU-helper в круглые скобки, вы запрашиваете, чтобы выделение обрабатывалось как функция, и передавая ALU-helper только 1 аргумент. Пытаться:

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

То же самое и с вызовом ALU-helper в ALUn.

person Scott Hunter    schedule 08.04.2012