- (let ((behaviour (hash-table-ref actor-table address)))
- (unless (null? behaviour)
- ((hash-table-ref actor-table address)))) message)
+ (if trace-enabled
+ (print "Dispatching message " message " to " address))
+ (let ((behaviour (hash-table-ref/default actor-table address '())))
+ (if (null? behaviour)
+ (print "Warning: discarded message " message " to unknown actor " address)
+ (let ((value (apply behaviour (cons address message))))
+ (case value
+ ((sleep) 'do-nothing)
+ ((done)
+ (if trace-enabled
+ (print "Deleting actor " address))
+ (hash-table-delete! actor-table address))
+ (else
+ (if trace-enabled
+ (print "Updating behaviour of " address))
+ (hash-table-set! actor-table address value)))))))