summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ricketyspace/sicp/two/thirtytwo.scm16
1 files changed, 16 insertions, 0 deletions
diff --git a/net/ricketyspace/sicp/two/thirtytwo.scm b/net/ricketyspace/sicp/two/thirtytwo.scm
new file mode 100644
index 0000000..31d6446
--- /dev/null
+++ b/net/ricketyspace/sicp/two/thirtytwo.scm
@@ -0,0 +1,16 @@
+;;;; License: CC0-1.0
+
+(define-module (net ricketyspace sicp two thirtytwo)
+ #:export (subsets))
+
+(define (subsets s)
+ (if (null? s)
+ (list '())
+ (let ((rest (subsets (cdr s))))
+ (append rest (map (lambda (item) (cons (car s) item)) rest)))))
+
+;;; Guile REPL
+;;;
+;;; scheme@(guile-user)> ,use (net ricketyspace sicp two thirtytwo)
+;;; scheme@(guile-user)> (subsets '(1 2 3))
+;;; $6 = (() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3))