Commit initial version
[guile-orca] / examples / rpc-stream-fold-largest-sum.scm
1 #!/usr/bin/env -S guile -s
2 !#
3
4 (add-to-load-path "..")
5 (use-modules (orca))
6 (use-modules (ice-9 streams))
7
8 (define stream-add-two (make-stream (lambda (state)
9                                       (if (> state (* 2 (rpc-worker-process-size)))
10                                         '()
11                                         (cons state (+ state 2))))
12                          (rpc-worker-process-id)))
13
14 (define stream-add-one (make-stream (lambda (state)
15                                      (if (> state (* 2 (rpc-worker-process-size)))
16                                        '()
17                                        (cons state (+ state 1))))
18                         (rpc-worker-process-id)))
19
20 (define (largest-sum return prev a b)
21  (if (> prev 10)
22   (return)
23   (let ((sum (+ (apply + a) (apply + b))))
24    (if (> prev sum) prev sum))))
25
26 (rpc-start)
27
28 (format #t "I'm master process. Received ~s ~%"
29   (rpc-stream-fold largest-sum 0 stream-add-one stream-add-two))
30
31 (rpc-finalize)