您提出的问题似乎不涉及行为空间。要计算列表中的头数,请使用table
扩展名。(你给的例子是二进制的,有固定长度的序列,所以正面的数量决定了反面的数量,所以你只需要数其中一个即可。)
extensions [table]
to-report nHeads01 [#lst]
let _t table:counts #lst
report ifelse-value (table:has-key? _t "H") [
table:get _t "H" ;case sensitive ...
][
0
]
end
例如,我们可以生成一些长度为 4 的随机序列(来自您的示例)并过滤长度为 2 的随机序列(或其他任何序列)。
to-report randomHT [#n]
report n-values #n [[?] -> one-of ["H" "T"]]
end
to test
let _xss n-values 20 [[?] -> randomHT 4] ;20 lists to filter
print filter [[?] -> (2 = nHeads01 ?)] _xss ;print those with 2 heads
end
如果您将序列存储为字符串,您可以explode
在使用上述代码之前安装字符串扩展名和字符串,或者您可以按照NetLogo read in file as list of characters将字符串转换为字符列表。例如,
to-report nHeads02 [#str]
let _lst map [[?] -> item ? #str] n-values length #str [[?] -> ?]
report nHeads01 _lst
end