Netlogo - ifelse声明

时间:2015-10-20 15:32:52

标签: if-statement patch netlogo

我在Netlogo中遇到问题,我应该检查特定补丁的邻居补丁是否已经涂成黑色。

这就是我认为它可以起作用的方式:

ifelse [ask patch xcoord-temp ycoord-temp [ask patches in-radius rnd_radius [pcolor = black]]]?
  [print "true"]
  [print "false"]

Error Message is: Expected a TRUE/FALSE here, rather than a list or block.

xcoord-tempycoord-temp是计算出的坐标。

rnd_radius是1到15之间的随机半径。

那么有人知道如何解决这个问题吗?

谢谢!

此致 约翰

2 个答案:

答案 0 :(得分:0)

首先,记者patch收到一个与补丁相关联的识别符。如果您希望ask使用某个位置的某个地方的补丁,请使用[patch-at] 1

其次,我不理解您的代码?中使用问号。

第三,使用[pcolor = black]编译器理解你想要set而不是得到。

最后,您可以使用单词of来访问代理的值。

所以我会这样说出来:

to myprocedure
  ask patch-at xcoord-temp ycoord-temp 
      [
        check-color
      ]
end
to check-color
      ifelse [pcolor] of (patches in-radius rnd_radius) = black
      [print "true"]
      [print "false"]
end

注意,我使用的额外程序可能不完整,也许它必须接收您使用的时间坐标;除非这些坐标是随时间变化的全局变量,否则你可以使用这样的过程。

请告诉我们这是否对您有所帮助,我现在没有安装NetLogo,我是根据字典做的。

编辑: 正如评论中所述

[pcolor] of (patches in-radius rnd_radius)将返回一个列表,因此它永远不会等于black

您必须要求修补程序的特定邻居,或者可能在前一个语句的列表中使用one-of

答案 1 :(得分:0)

最简单,最简洁的方法是编写像这样的记者程序

to-report any-black-neighbors-in-radius? [r]
  report any? patches in-radius r with [pcolor = black]
end

然后,您可以使用r作为参数来请求修补程序运行此过程,并使用print值,或将其用于其他内容。像这样:

ask one-of patches [print any-black-neighbors-in-radius 5]

如果您想要一个特定的补丁来运行它,只需使用patch来询问该补丁,如下所示:

ask patch 5 -5 [print any-black-neighbors-in-radius 3]