#lang racket
(require "3-3-4-program.rkt")
;; Examining these test cases will help understand how the program is working.
;; All the repl output is at the end. I thought it was more readable that way.
;; TRY AN INVERTER
(displayln 'INVERTER)
(define in (make-wire))
(set-signal! in 1)
(define out (make-wire))
(displayln 'BEFORE)
(probe 'in in)
(probe 'out out)
(displayln 'DURING)
(inverter in out)
(propagate)
(displayln 'AFTER)
(probe 'in in)
(probe 'out out)
(printf "~n")
;; TRY AN AND-GATE
(displayln 'AND-GATE)
(define in3 (make-wire))
(set-signal! in3 1)
(define in4 (make-wire))
(define out2 (make-wire))
(displayln 'BEFORE)
(probe 'in3 in3)
(probe 'in4 in4)
(probe 'out2 out2)
(displayln 'DURING)
(and-gate in3 in4 out2)
(propagate)
(displayln 'AFTER)
(probe 'in3 in3)
(probe 'in4 in4)
(probe 'out2 out2)
(printf "~n")
;; TRY AN OR-GATE
(displayln 'OR-GATE)
(define in1 (make-wire))
(set-signal! in1 1)
(define in2 (make-wire))
(define out1 (make-wire))
(displayln 'BEFORE)
(probe 'in1 in1)
(probe 'in2 in2)
(probe 'out1 out1)
(displayln 'DURING)
(or-gate in1 in2 out1)
(propagate)
(displayln 'AFTER)
(probe 'in1 in1)
(probe 'in2 in2)
(probe 'out1 out1)
(printf "~n")
;; TRY A HALF-ADDER
(displayln 'HALF-ADDER)
(define in5 (make-wire))
(set-signal! in5 1)
(define in6 (make-wire))
(define sum (make-wire))
(define carry (make-wire))
(displayln 'BEFORE)
(probe 'in5 in5)
(probe 'in6 in6)
(probe 'sum sum)
(probe 'carry carry)
(displayln 'DURING)
(half-adder in5 in6 sum carry)
(propagate)
(displayln 'AFTER)
(probe 'in5 in5)
(probe 'in6 in6)
(probe 'sum sum)
(probe 'carry carry)
(printf "~n")
;; TRY A FULL-ADDER
(displayln 'FULL-ADDER)
(define in7 (make-wire))
(set-signal! in7 1)
(define in8 (make-wire))
(define carry-in (make-wire))
(define sum1 (make-wire))
(define carry-out (make-wire))
(displayln 'BEFORE)
(probe 'in7 in7)
(probe 'in8 in8)
(probe 'carry-in carry-in)
(probe 'sum1 sum1)
(probe 'carry-out carry-out)
(displayln 'DURING)
(full-adder in7 in8 carry-in sum1 carry-out)
(propagate)
(displayln 'AFTER)
(probe 'in7 in7)
(probe 'in8 in8)
(probe 'carry-in carry-in)
(probe 'sum1 sum1)
(probe 'carry-out carry-out)
(printf "~n")
;; REPL OUTPUT
;; INVERTER
;; 'done
;; BEFORE
;; in 0 New-value = 1
;; out 0 New-value = 0
;; DURING
;; 'ok
;; 'done
;; AFTER
;; in 2 New-value = 1
;; out 2 New-value = 0
;; AND-GATE
;; 'done
;; BEFORE
;; in3 2 New-value = 1
;; in4 2 New-value = 0
;; out2 2 New-value = 0
;; DURING
;; 'ok
;; 'done
;; AFTER
;; in3 5 New-value = 1
;; in4 5 New-value = 0
;; out2 5 New-value = 0
;; OR-GATE
;; 'done
;; BEFORE
;; in1 5 New-value = 1
;; in2 5 New-value = 0
;; out1 5 New-value = 0
;; DURING
;; 'ok
;; out1 10 New-value = 1
;; 'done
;; AFTER
;; in1 10 New-value = 1
;; in2 10 New-value = 0
;; out1 10 New-value = 1
;; HALF-ADDER
;; 'done
;; BEFORE
;; in5 10 New-value = 1
;; in6 10 New-value = 0
;; sum 10 New-value = 0
;; carry 10 New-value = 0
;; DURING
;; 'ok
;; sum 18 New-value = 1
;; 'done
;; AFTER
;; in5 18 New-value = 1
;; in6 18 New-value = 0
;; sum 18 New-value = 1
;; carry 18 New-value = 0
;; FULL-ADDER
;; 'done
;; BEFORE
;; in7 18 New-value = 1
;; in8 18 New-value = 0
;; carry-in 18 New-value = 0
;; sum1 18 New-value = 0
;; carry-out 18 New-value = 0
;; DURING
;; 'ok
;; sum1 26 New-value = 1
;; 'done
;; AFTER
;; in7 26 New-value = 1
;; in8 26 New-value = 0
;; carry-in 26 New-value = 0
;; sum1 26 New-value = 1
;; carry-out 26 New-value = 0
Comments
0 B
|👍
/👎
0 B
|👍
/👎