You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl 6如何生成列表的所有非空子集?

Perl 6 生成所有非空无序子集的内置方法

当然有啦!Perl 6 里内置的 combinations 方法正好能搞定这个需求,而且用法超简单。

对于你给出的列表:

my @a = 1, 2, 3;

只需要调用 combinations 并指定要生成的子集长度范围(从1到列表的元素个数),就能直接得到所有非空子集:

my @non-empty-subsets = @a.combinations(1..@a.elems);
say @non-empty-subsets;

运行这段代码,输出结果就是你想要的:

((1), (2), (3), (1 2), (1 3), (2 3), (1 2 3))

补充说明:

  • combinations 方法默认不带参数时,会返回包括空集在内的所有子集。所以我们通过 1..@a.elems 限定只生成长度为1到3的子集,就自动排除了空集。
  • 这个方法生成的子集是无序的(不会出现像 (2,1) 这种和 (1,2) 重复的情况),因为它是基于原列表的元素顺序进行组合选择,每个唯一的元素组合只会出现一次,完全符合你对“子集无序”的要求。
  • 如果需要将子集转换成集合类型(比如 Set),可以简单处理:@non-empty-subsets.map(*.Set),不过从你的示例来看,列表形式已经满足需求啦。

内容的提问来源于stack exchange,提问作者Eugene Barsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:41:50