Power set: Difference between revisions

Content deleted Content added
Line 1,347:
((1 2 3) (1 2) (1 3) (1) (2 3) (2) (3) ())
((A C E) (A C) (A E) (A) (C E) (C) (E) ())
 
Call/cc generation:<lang lisp>(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)))))</lang>output<lang>(1 2)
(1 3)
(1)
(2 3)
(2)
(3)
()</lang>
 
=={{header|Smalltalk}}==