X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=actors.scm;h=263acdc7fc1266bb2887f739cfbcd41c39bc4b6a;hb=f1da9dd563657b366b9918d5d5e6b61c1e59c43b;hp=8a581b9cc818eee305b1ea8faf6540379cef91ce;hpb=3b3f13a56eb0719f02d2eb580dd5f3ec392fa4b8;p=actors.git diff --git a/actors.scm b/actors.scm index 8a581b9..263acdc 100644 --- a/actors.scm +++ b/actors.scm @@ -1,6 +1,6 @@ (import srfi-69 matchable) -(define trace-enabled #t) +(define trace-enabled #f) ;;; ;;; Actor creation @@ -9,6 +9,8 @@ (define actor-table (make-hash-table)) (define (make-actor-with-address address behaviour) + (if trace-enabled + (print "Making actor with address " address)) (hash-table-set! actor-table address behaviour) address) @@ -31,11 +33,16 @@ (if (null? behaviour) (print "Warning: discarded message " message " to unknown actor " address) (let ((value (apply behaviour (cons address message)))) - (match value - ('done (hash-table-delete! actor-table address)) - ('sleep 'do-nothing) + (case value + ((sleep) 'do-nothing) + ((done) + (if trace-enabled + (print "Deleting actor " address)) + (hash-table-delete! actor-table address)) (else - hash-table-set! actor-table address value)))))) + (if trace-enabled + (print "Updating behaviour of " address)) + (hash-table-set! actor-table address value))))))) ;;; ;;; FIFO queue implementation @@ -119,25 +126,3 @@ (define (send-and-run actor . message) (apply send-message (cons actor message)) (run)) - -;;; -;;; Testing -;;; - -(define factorial - (make-actor-with-address 'factorial - (lambda (self customer . message) - (match message - ((n) (send-message self customer n 1) 'sleep) - ((0 acc) (send-message customer acc) 'done) - ((n acc) (send-message self customer (- n 1) (* acc n)) 'sleep))))) - -(define println - (make-actor-with-address 'println - (lambda (self . message) - (apply print message) - 'sleep))) - -(send-message factorial println 5) -(send-message factorial println 7) -(run)