summaryrefslogtreecommitdiff
path: root/modules/language/python/module/f2.scm
blob: 3a00158b3a9d75b98532747570942e04e9418591 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
(define-module (language python module f2)
  #:use-module (language python exceptions)
  #:use-module (language python for)
  #:use-module (language python yield)
  #:use-module (language python try)
  #:re-export (next send sendException Exception)
  #:export (gen))

(define gen
  (make-generator
   (lambda (yield n)
     (try
      (lambda ()
        (let lp ((i 0) (s 0))
          (if (< i n)
              (let ((x (+ s i)))
                (call-with-values (lambda () (yield x))
                  (lambda x (pk 'send x)))
                (lp (+ i 1) x)))))
      
      (#:except Exception =>
                (lambda (tag l)
                  (apply pk tag l)))
      
      #:finally
      (lambda ()
        (pk 'yeeeeeees))))))

(for ((i : (gen 10))) ()
     (pk  i))