Minor change.
[actors.git] / actors.scm
index 8a581b9..633445a 100644 (file)
@@ -1,6 +1,6 @@
 (import srfi-69 matchable)
 
-(define trace-enabled #t)
+(define trace-enabled #f)
 
 ;;;
 ;;; Actor creation
     (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) (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
 (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)