clojure.math.combinatorics

Formerly clojure.contrib.combinatorics.

Efficient, functional algorithms for generating lazy sequences for common combinatorial functions.

Releases and Dependency Information

Latest stable release: 0.0.3

Leiningen dependency information:

[org.clojure/math.combinatorics "0.0.3"]

Maven dependency information:

<dependency>
  <groupId>org.clojure</groupId>
  <artifactId>math.combinatorics</artifactId>
  <version>0.0.3</version>
</dependency>

Example Usage

All functions return lazy sequences.

(ns example.core
  (:require [clojure.math.combinatorics :as combo]))
  
; all the unique ways of taking n different elements from items
    
(combinations [1 2 3] 2)
  
;;=> ((1 2) (1 3) (2 3))
  
  
; all the subsets of items

(subsets [1 2 3]) 

;;=> (() (1) (2) (3) (1 2) (1 3) (2 3) (1 2 3))  
  

; all the ways to take one item from each passed-in sequence

(cartesian-product [1 2] [3 4]) 

;;=> ((1 3) (1 4) (2 3) (2 4))


; all the ways to take n (possibly the same) items from the sequence of items

(selections [1 2] 3) 

;;=> ((1 1 1) (1 1 2) (1 2 1) (1 2 2) (2 1 1) (2 1 2) (2 2 1) (2 2 2))
  

; all the permutations of items

(permutations [1 2 3]) 

;;=> ((1 2 3) (1 3 2) (2 1 3) (2 3 1) (3 1 2) (3 2 1))
  

Refer to docstrings in the clojure.math.combinatorics namespace for additional documentation.

API Documentation

Developer Information

Changelog

  • Release 0.0.3 on 2012-07-06

    • Fixed bug with (selections [false] 3) returning nil
    • Fixed test syntax for Clojure 1.4.0/1.5.0
  • Release 0.0.2 on 2011-10-24

    • Deprecated lex-permutations (permutations is now intelligent)
  • Release 0.0.1 on 2011-09-29

    • Initial release.
    • Source-compatible with clojure.contrib.math, except for the name change.

License

Distributed under the Eclipse Public License, the same as Clojure.