我试图在NetLogo中生成一个列表,其中包含几个不同的0和1的唯一列表.1的数量取决于j,列表的数量取决于i。例如,我有这些代码行:
if (i = 4) and (j=1) [set mylist = [[1 0 0 0][0 1 0 0][0 0 1 0][0 0 0 1]]]
if (i = 4) and (j=2) [set mylist = [[1 1 0 0][1 0 1 0][1 0 0 1][0 1 1 0][0 1 0 1] [0 0 1 1]]]
我写的是在列表中没有任何重复的情况下制作0和1的所有可能的唯一组合。我希望能够做同样的事情,但对于i和j的值,范围从1-10。有没有一个如何做到这一点的例子,或某种伪代码算法,任何人都知道我可以检查出来?谢谢!
答案 0 :(得分:2)
to-report combinations [_m _s]
if (_m = 0) [ report [[]] ]
if (_s = []) [ report [] ]
let _rest butfirst _s
let _lista map [? -> fput item 0 _s ?] combinations (_m - 1) _rest
let _listb combinations _m _rest
report (sentence _lista _listb)
end
;convert location list to bitstring
to-report bitstring [#len #locs]
report map [? -> ifelse-value (member? ? #locs) [1] [0]] range #len
end
;try it out:
to-report test-values [#i #j] ;e.g., test-values 4 2
report map [? -> bitstring #i ?] combinations #j range #i
end