Merge branch 'upstream' into dfsg-orig
[debian/gnuradio] / gnuradio-core / src / utils / permute.scm
diff --git a/gnuradio-core/src/utils/permute.scm b/gnuradio-core/src/utils/permute.scm
new file mode 100644 (file)
index 0000000..23ddfc9
--- /dev/null
@@ -0,0 +1,27 @@
+(require 'common-list-functions)
+
+
+(define (permute lst)
+  (define (aux set head)
+    (cond ((null? set) head)
+         (else
+          (map (lambda (x)
+                 (aux (set-difference set (list x))
+                      (cons x head)))
+               set))))
+  (aux lst '()))
+
+(define (permute-2 lst)
+  (let ((result '()))
+    (define (aux set head)
+      (if (null? set)
+         (set! result (cons head result))
+         (for-each (lambda (x)
+                     (aux (set-difference set (list x))
+                          (cons x head)))
+                   set)))
+    (aux lst '())
+    result))
+
+
+