Added second example using actors to capture state.
[actors.git] / testing_factorial2.scm
1 (load "actors.scm")
2
3 (define factorial
4   (make-actor-with-address 'factorial
5    (lambda (self customer n)
6      (let ((fact_svc (make-actor
7                       (lambda (self n acc)
8                         (cond
9                          ((> n 0) (send-message self (- n 1) (* acc n)) 'sleep)
10                          (else (send-message customer acc) 'done))))))
11        (send-message fact_svc n 1)
12        'sleep))))
13
14 (define println
15   (make-actor-with-address 'println
16    (lambda (self . message)
17      (apply print message)
18      'sleep)))
19
20 (send-message factorial println 5)
21 (send-message factorial println 7)
22 (run)