mid air commit to solution 3.31
authorRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Sat, 2 Apr 2011 07:42:16 +0000 (13:12 +0530)
committerRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Sat, 2 Apr 2011 07:42:16 +0000 (13:12 +0530)
src/sicp/ex3_31.rkt [new file with mode: 0644]

diff --git a/src/sicp/ex3_31.rkt b/src/sicp/ex3_31.rkt
new file mode 100644 (file)
index 0000000..4b78357
--- /dev/null
@@ -0,0 +1,32 @@
+#lang racket
+
+#|
+
+If we don't call the proc in the add-action! procedure then the outputs for the 
+given inputs will be in some undefined default states. They won't reflect the 
+logic that the function blocks are representing.
+
+Let us take half adder example:
+
+(define (half-adder a b s c)
+  (let ((d (make-wire)) (e (make-wire)))
+    (or-gate a b d)
+    (and-gate a b c)
+    (inverter c e)
+    (and-gate d e s)
+    'ok))
+
+If accept-action-proc! is defined without the call to proc, i.e.
+
+(define (accept-action-proc! proc)
+  (set! action-procedures (cons proc action-procedures))
+
+then, let us see what happens.
+
+The or-gate definition will call add-action on both its inputs a and b. make-wire 
+by default sets the wire value as 0. So, for the default case, the inputs to the
+half-adder will be 0 and 0 and the output of the or-gate and and-gate will be 0.
+i.e. D = 0, C = 0.
+E will also be 0. So, S = 0 C = 0, irrespective of the initial values of a and b.
+
+|# 
\ No newline at end of file