我在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-temp
和ycoord-temp
是计算出的坐标。
rnd_radius
是1到15之间的随机半径。
那么有人知道如何解决这个问题吗?
谢谢!
此致 约翰
答案 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]