Answers:
{[[]]\{[.;]`{1$[1$]+@@`1$`{[2$]-@@[+]+}++/}+%}/}:P;
该脚本定义了一个变量P
,该变量从堆栈顶部获取一个数组,并推回所有分区的列表,例如
[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"]]]
它也适用于较大的列表:
6, P ,p # prints 203, i.e. Bell number B6
8, P ,p # 4140
您可以在线执行自己的测试。
([:<a:-.~])"1~.((>:@i.#:i.@!)#l)<@;/."1[l=:;:1!:1[1
从键盘获取输入,各项目之间用空格隔开:
([:<a:-.~])"1~.((>:@i.#:i.@!)#l)<@;/."1[l=:;:1!:1[1
a b c
+-----+------+------+------+-------+
|+---+|+--+-+|+--+-+|+-+--+|+-+-+-+|
||abc|||ab|c|||ac|b|||a|bc|||a|b|c||
|+---+|+--+-+|+--+-+|+-+--+|+-+-+-+|
+-----+------+------+------+-------+
由于nimi节省了5个字节。
x#[]=[[[x]]]
x#(y:s)=((x:y):s):map(y:)(x#s)
p=foldr((=<<).(#))[[]]
例:
*Main> p "abc"
[["abc"],["bc","a"],["ac","b"],["c","ab"],["c","b","a"]]
#
::map(y:)(x#s)
并打开拉姆达为自由点版本:foldr((=<<).(#))[[]]
。