- (print "Dispatching message " message " to " address)
- (let* ((behaviour (hash-table-ref actor-table address))
- (value (behaviour address message)))
- (match value
- ('done (hash-table-delete! actor-table address))
- ('sleep 'do-nothing)
- (else
- hash-table-set! actor-table address value))))
+ (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))))
+ (match value
+ ('done (hash-table-delete! actor-table address))
+ ('sleep 'do-nothing)
+ (else
+ hash-table-set! actor-table address value))))))