Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

114 lines (66 sloc) 2.8 kb

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.

Jump to Line
Something went wrong with that request. Please try again.