24 lines
552 B
Scheme
24 lines
552 B
Scheme
(define (power-set lst)
|
|
(define (iter yield)
|
|
(let recur ((a '()) (b lst))
|
|
(if (null? b) (set! yield
|
|
(call-with-current-continuation
|
|
(lambda (resume)
|
|
(set! iter resume)
|
|
(yield a))))
|
|
(begin (recur (append a (list (car b))) (cdr b))
|
|
(recur a (cdr b)))))
|
|
|
|
;; signal end of generation
|
|
(yield 'end-of-seq))
|
|
|
|
(lambda () (call-with-current-continuation iter)))
|
|
|
|
(define x (power-set '(1 2 3)))
|
|
(let loop ((a (x)))
|
|
(if (eq? a 'end-of-seq) #f
|
|
(begin
|
|
(display a)
|
|
(newline)
|
|
(loop (x)))))
|