If statement 在NetLogo中使用带有代理集的if语句

If statement 在NetLogo中使用带有代理集的if语句,if-statement,conditional-statements,netlogo,If Statement,Conditional Statements,Netlogo,NetLogo的新功能。我使用的是Fire简单示例,我添加了新的树,其颜色为pcolor=blue。我试图提出一个条件,即蓝色斑块只有在其周围的4个邻居也是红色的情况下才会变成红色 使用[pcolor=blue]询问补丁[ 设置颜色为红色 if(与[pcolor=red]>3的相邻4) ] 我犯了一个错误 “>预期此输入为代理、数字或字符串,但得到的是代理集”因此编写的代码存在一些小问题 首先,在NetLogo中,if命令后面必须跟一个命令块。因此,如果someCheck您不能执行命令,您必须执

NetLogo的新功能。我使用的是Fire简单示例,我添加了新的树,其颜色为pcolor=blue。我试图提出一个条件,即蓝色斑块只有在其周围的4个邻居也是红色的情况下才会变成红色

使用[pcolor=blue]询问补丁[ 设置颜色为红色 if(与[pcolor=red]>3的相邻4) ]

我犯了一个错误
“>预期此输入为代理、数字或字符串,但得到的是代理集”

因此编写的代码存在一些小问题

首先,在NetLogo中,
if
命令后面必须跟一个命令块。因此,如果someCheck您不能执行
命令,您必须执行
如果someCheck[command]

其次,
带有[color=red]
的邻居4将为您提供一个代理集,即本例中的补丁集合。因此,您无法将代理集与数字进行比较,例如在[pcolor=red]>3的
邻居4中。您需要获取代理集的名称:
count neighbors4 with[pcolor=red]>3

ask patches with [pcolor = blue] [ 
  if (count neighbors4 with [pcolor = red] > 3) [ 
    set pcolor red 
  ] 
]
此外,如果我们注意到内部if语句只是一个额外的过滤器,蓝色补丁将变为红色,那么我们实际上可以使用外部ask
中的
with
语句,并将事情简化一点:

ask patches with [pcolor = blue and (count neighbors4 with [pcolor = red] > 3)] [
  set pcolor red 
]
希望有帮助