Music.Theory.Set.List

Description

Set operations on lists.

Synopsis

# Documentation

set :: Ord a => [a] -> [a]Source

Remove duplicate elements with `nub` and then `sort`.

``` set_l [3,3,3,2,2,1] == [1,2,3]
```

n_powerset :: Integral n => n -> nSource

Size of powerset of set of cardinality n, ie. `2` `^` n.

``` map n_powerset [6..9] == [64,128,256,512]
```

powerset :: [a] -> [[a]]Source

Powerset, ie. set of all subsets.

``` sort (powerset [1,2]) == [[],[1],[1,2],[2]]
map length (map (\n -> powerset [1..n]) [6..9]) == [64,128,256,512]
```

pairs :: [a] -> [(a, a)]Source

Two element subsets.

``` pairs [1,2,3] == [(1,2),(1,3),(2,3)]
```

triples :: [a] -> [(a, a, a)]Source

Three element subsets.

``` triples [1..4] == [(1,2,3),(1,2,4),(1,3,4),(2,3,4)]
```
``` let f n = genericLength (triples [1..n]) == nk_combinations n 3
in all f [1..15]
```

expand_set :: Ord a => Int -> [a] -> [[a]]Source

Set expansion (ie. to multiset of degree n).

``` expand_set 4 [1,2,3] == [[1,1,2,3],[1,2,2,3],[1,2,3,3]]
```

partitions :: Eq a => [a] -> [[[a]]]Source

All distinct multiset partitions, see `partitions`.

``` partitions "aab" == [["aab"],["a","ab"],["b","aa"],["b","a","a"]]
```
``` partitions "abc" == [["abc"]
,["bc","a"],["b","ac"],["c","ab"]
,["c","b","a"]]
```

cartesian_product :: [a] -> [b] -> [(a, b)]Source

Cartesian product of two sets.

``` let r = [('a',1),('a',2),('b',1),('b',2),('c',1),('c',2)]
in cartesian_product "abc" [1,2] == r
```