Partitions of a list
GolfScript, 51 characters
{[[]]\{[.;]`{1$[1$]+@@`1$`{[2$]-@@[+]+}++/}+%}/}:P;
The script defines a variable P
which takes an array from top of the stack and pushes back a list of all partitions, e.g.
[1 2] P # => [[[1] [2]] [[1 2]]]
["a" "b" "c"] P # => [[["a"] ["b"] ["c"]] [["b"] ["a" "c"]] [["a"] ["b" "c"]] [["a" "b"] ["c"]] [["a" "b" "c"]]]
It does also work on larger lists:
6, P ,p # prints 203, i.e. Bell number B6
8, P ,p # 4140
You may perform own tests online.
J, 51 characters
([:<a:-.~])"1~.((>:@i.#:i.@!)#l)<@;/."1[l=:;:1!:1[1
Takes input from the keyboard, items separated by spaces:
([:<a:-.~])"1~.((>:@i.#:i.@!)#l)<@;/."1[l=:;:1!:1[1
a b c
+-----+------+------+------+-------+
|+---+|+--+-+|+--+-+|+-+--+|+-+-+-+|
||abc|||ab|c|||ac|b|||a|bc|||a|b|c||
|+---+|+--+-+|+--+-+|+-+--+|+-+-+-+|
+-----+------+------+------+-------+
GolfScript (43 chars)
{[[]]:E\{:v;{:^E+1/{^1$-\[~[v]+]+}/}%}/}:P;
or
{[[]]:E\{:v;{:^E+1/{^1$-\{[v]+}%+}/}%}/}:P;
Same input format, output format, and function name as Howard's solution. There's no brute forcing: this takes the simple iterative approach of adding one element from the input list to the partition each time round the outer loop.