;; return the actor id
actor-id))
-(define* (hive-create-actor hive actor-class
- #:key
- (init '())
- id-cookie)
+(define* (hive-create-actor hive actor-class #:rest init)
(%hive-create-actor hive actor-class
- init id-cookie))
-
-(define-syntax hive-create-actor*
- (syntax-rules ()
- "Create an instance of actor-class attached to this hive.
-Return the new actor's id.
+ init #f))
-Used internally, and used for bootstrapping a fresh hive.
-
-Note that actors should generally not call this method directly.
-Instead, actors should call create-actor."
- ((_ args ... (init-args ...))
- (hive-create-actor args ...
- #:init (list init-args ...)))))
+(define* (hive-create-actor* hive actor-class id-cookie #:rest init)
+ (%hive-create-actor hive actor-class
+ init id-cookie))
;; TODO: Give actors this instead of the actual hive reference
(define (main . args)
(define agenda (make-agenda))
(define hive (make-hive))
- (define professor (hive-create-actor hive <professor>))
+ (define professor (hive-create-actor* hive <professor> "prof"))
(define namegen (student-name-generator))
(define students
(map
(lambda _
- (hive-create-actor* hive <student>
- (#:name (namegen))))
+ (let ((name (namegen)))
+ (hive-create-actor* hive <student> name
+ #:name name)))
(iota num-students)))
;; Bootstrap each student into bothering-professor mode.
(~display "lazy-rep> I'm not answering that.\n")))
(let* ((hive (make-hive))
- (customer (hive-create-actor hive <antsy-caller>
- #:id-cookie "antsy-caller"))
- (diligent-rep (hive-create-actor hive <diligent-rep>
- #:id-cookie "diligent-rep"))
- (lazy-rep (hive-create-actor hive <lazy-rep>
- #:id-cookie "lazy-rep")))
+ (customer (hive-create-actor* hive <antsy-caller> "antsy-caller"))
+ (diligent-rep (hive-create-actor* hive <diligent-rep> "diligent-rep"))
+ (lazy-rep (hive-create-actor* hive <lazy-rep> "lazy-rep")))
;; * Playing a tape of a diligent service rep *
(parameterize ((%record-out (open-output-string)))
(let* ((result (ez-run-hive