Я новичок в языке схем, поэтому у меня возникли проблемы с написанием процедуры, которая принимает 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.
multiplexor4
,multiplexor2
,full-adder
и т. д.), чтобы сделать его SSCCE. - person Óscar López   schedule 08.04.2012