Some more progress. I really should read more of this book.
This commit is contained in:
@ -14,9 +14,9 @@
|
|||||||
|
|
||||||
|
|
||||||
(define-syntax-rule (meas form)
|
(define-syntax-rule (meas form)
|
||||||
(let ([my-time (current-inexact-milliseconds)])
|
(let ([my-time (real-time)])
|
||||||
(let ([res form])
|
(let ([res form])
|
||||||
(- (current-inexact-milliseconds) my-time))))
|
(- (real-time) my-time))))
|
||||||
|
|
||||||
|
|
||||||
(define (recursive n)
|
(define (recursive n)
|
||||||
@ -32,6 +32,9 @@
|
|||||||
(define (iter-start n)
|
(define (iter-start n)
|
||||||
(iter 0 1 2 (- n 2)))
|
(iter 0 1 2 (- n 2)))
|
||||||
|
|
||||||
|
;; note, as the book says,
|
||||||
|
;; this generates an *iterative process*, despite being
|
||||||
|
;; fully recursive
|
||||||
(define (ex-1-11 n)
|
(define (ex-1-11 n)
|
||||||
(let loop ((i n))
|
(let loop ((i n))
|
||||||
(if (< i 2)
|
(if (< i 2)
|
||||||
|
52
sec-3-3-4.scm
Normal file
52
sec-3-3-4.scm
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
|
||||||
|
;; The digital circuit program is very interesting,
|
||||||
|
;; not just because it is a good demonstration of scheme,
|
||||||
|
;; but also because I really think this is a practical
|
||||||
|
;; program.
|
||||||
|
|
||||||
|
;; anyway, here are the exercises
|
||||||
|
|
||||||
|
;; so, the book does not provide an implementation for make-wire,
|
||||||
|
;; get-signal, set-signal!, add-action! and after-delay
|
||||||
|
;; so if we want this code to run, we need to implement them.
|
||||||
|
|
||||||
|
;; I chose to use a closure for this, because this is something
|
||||||
|
;; I really learned with SICP so may as well. We could also use
|
||||||
|
;; a box (in r6rs I believe, or at least chez)
|
||||||
|
;; and in all fairness I believe that is more efficient, however this was funny
|
||||||
|
|
||||||
|
;; EDIT: later on in the chapter the book actually provides a similar implementation
|
||||||
|
;; so I guess I'm prescient now
|
||||||
|
(define (make-wire)
|
||||||
|
(let ((val #f) (actions '()))
|
||||||
|
(lambda (x param)
|
||||||
|
(cond
|
||||||
|
((eq? x 'get) val)
|
||||||
|
((eq? x 'set!)
|
||||||
|
(if (not (boolean=? val param))
|
||||||
|
(begin (set! val param)
|
||||||
|
(map (lambda (x) (x))
|
||||||
|
actions))))
|
||||||
|
((eq? x 'add-action!)
|
||||||
|
(set! actions (cons param actions))
|
||||||
|
(param))))))
|
||||||
|
|
||||||
|
(define (get-signal w)
|
||||||
|
(w 'get 'USELESS))
|
||||||
|
(define (set-signal! w val)
|
||||||
|
(w 'set! val))
|
||||||
|
(define (add-action! w action)
|
||||||
|
(w 'add-action! action))
|
||||||
|
|
||||||
|
|
||||||
|
(define a (make-wire))
|
||||||
|
(define b (make-wire))
|
||||||
|
(define c (make-wire))
|
||||||
|
(define d (make-wire))
|
||||||
|
(define e (make-wire))
|
||||||
|
(define s (make-wire))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -128,7 +128,3 @@ x ; => '(a b c d)
|
|||||||
(loop x)
|
(loop x)
|
||||||
(vector-length (hashtable-values table)))
|
(vector-length (hashtable-values table)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BIN
sec-3-3.so
Normal file
BIN
sec-3-3.so
Normal file
Binary file not shown.
Reference in New Issue
Block a user