我正在尝试编写一个if语句,如果其中三个neighbor4是相同颜色,则执行命令 - 现在,我正在使用全部?但我想扩大到3而不是4个邻居。
我试过的代码没有为if语句提供布尔值
ask patches with [pcolor = black][
if n-of 3 neighbors4 [pcolor != black]
[set pcolor 55]
]
我还尝试添加= true?但这也导致了错误
答案 0 :(得分:2)
正好3或至少3?如果恰好是3,请将下面的<=
更改为=
。
可能有一种更简单的方法,但这就是我提出的方法:
let colors remove-duplicates [ pcolor ] of neighbors4
let three-share-color? not empty? filter [ 3 <= count neighbors4 with [ pcolor = ? ] ] colors
remove-duplicates [ pcolor ] of neighbors4
将邻居的颜色作为列表获取,删除重复项(尽管这不是绝对必要的)。 filter [ 3 <= count neighbors4 with [ pcolor = ? ] ] colors
遍历每种颜色,抓住那种颜色的邻居,并检查是否至少有3种颜色。如果有3,它会保持颜色,否则它会抛弃它。 not empty?
会检查我们是否还有颜色。
您可以将其概括为任何数字,属性和代理集,如下所示:
to-report at-least-n-share [ n reporter agentset ]
let attributes remove-duplicates [ runresult reporter ] of agentset
report not empty? filter [ n <= count agentset with [ runresult reporter = ? ] ] attributes
end
对于这个问题,您可以将其称为:
at-least-n-share 3 (task [ pcolor ]) neighbors4
编辑:为了清楚起见,这是“如果三个neighbor4是相同颜色则执行命令的if语句”的通用解决方案。我忽略了特定的颜色。但是,如果你知道三个颜色应该提前,那么你只需要:
if count neighbors4 with [ pcolor = the-color ] >= 3 [
do-stuff
]
再次,如果你的意思是三个,请>=
和=
。