如何在Netlogo中形成一组数字的子集

如何在Netlogo中形成一组数字的子集,netlogo,Netlogo,尊敬的Netlogo社区: 我希望生成一组数字的子集。 例如,如果一个集合是[1 2 3 4 5],那么子集将是[1 2][1 3][1 4][1 5][1 2 3][1 2 4]。。。。。。。我知道在java中使用位操作可以很容易地生成。但我不知道如何在Netlogo中实现。我注定了。任何帮助都将不胜感激。谢谢这是使用递归最容易解决的问题: to-report subsets [xs] if empty? xs [ report [[]] ] let recurse subsets b

尊敬的Netlogo社区:

我希望生成一组数字的子集。
例如,如果一个集合是[1 2 3 4 5],那么子集将是[1 2][1 3][1 4][1 5][1 2 3][1 2 4]。。。。。。。我知道在java中使用位操作可以很容易地生成。但我不知道如何在Netlogo中实现。我注定了。任何帮助都将不胜感激。谢谢

这是使用递归最容易解决的问题:

to-report subsets [xs]
  if empty? xs [ report [[]] ]
  let recurse subsets butfirst xs
  report sentence recurse
                  map [fput first xs ?] recurse
end
基本思想是,如果需要
[1 2 3]
的子集,首先要找到
[2 3]
的所有子集。它们本身都是
[1 2 3]
的子集,另外,如果将
1
粘贴在它们的前面,结果列表也是答案的一部分

样本运行:

observer> print subsets [1 2 3]
[[] [3] [2] [2 3] [1] [1 3] [1 2] [1 2 3]]

谢谢你的回复。上述代码的问题在于,它在一个列表中提供了最多21个元素的子集。在第22个元素上,它将java堆空间的消息抛出memeory。我试图增加java的RAM分配,但没有解决这个问题。寻找你有价值的反馈。谢谢,我看到你在这里提出了一个新问题