If statement Netlogo-ifelse语句
我在Netlogo中遇到了一个问题,我应该检查某个特定补丁的相邻补丁是否已经被涂成黑色 这就是我认为它可以工作的方式:If statement Netlogo-ifelse语句,if-statement,patch,netlogo,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
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_半径
是介于1和15之间的随机半径
那么有人知道如何解决这个问题吗
谢谢
问候,,
John好的,首先,报告者
补丁
收到一个链接到补丁的标识符。如果您想向某个位置的修补程序询问问题,请使用[patch at]
第二,我不明白问号在你的代码?
中的用法
第三,通过使用[pcolor=black]
编译器可以理解您想要设置而不是获取
最后,您可以使用
的一词来访问代理的值
所以我会这样说:
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(半径为rnd_的面片)
将返回一个列表,因此它永远不能等于黑色
您必须请求修补程序的特定邻居,或者可能使用上一语句产生的列表中的之一。好的,首先,报告程序修补程序
接收链接到修补程序的标识符。如果您想向某个位置的修补程序询问问题,请使用[patch at]
第二,我不明白问号在你的代码?
中的用法
第三,通过使用[pcolor=black]
编译器可以理解您想要设置而不是获取
最后,您可以使用
的一词来访问代理的值
所以我会这样说:
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(半径为rnd_的面片)
将返回一个列表,因此它永远不能等于黑色
您必须请求修补程序的特定邻居,或者使用上一条语句产生的列表中的之一。最简单、最不冗长的方法是编写这样的报告程序
to-report any-black-neighbors-in-radius? [r]
report any? patches in-radius r with [pcolor = black]
end
然后,您可以要求修补程序使用r
作为参数运行此过程,然后打印该值,或将其用于其他用途。像这样:
询问其中一个补丁[打印半径为5的任何黑色邻居]
如果您想让某个补丁运行它,只需使用patch
请求该补丁,如下所示:
询问补丁5-5[打印半径3中的任何黑色邻居]
最简单、最不冗长的方法是编写这样的报告程序
to-report any-black-neighbors-in-radius? [r]
report any? patches in-radius r with [pcolor = black]
end
然后,您可以要求修补程序使用r
作为参数运行此过程,然后打印该值,或将其用于其他用途。像这样:
询问其中一个补丁[打印半径为5的任何黑色邻居]
如果您想让某个补丁运行它,只需使用patch
请求该补丁,如下所示:
询问patch 5-5[打印半径3中的任何黑色邻居]
[pcolor]半径中的补丁…
将返回一个颜色列表,列表永远不能等于黑色
,因此这将始终打印假
。你是对的,我只是将他的代码翻译成我的代码。谢谢你的快速回答!问题是,您的解决方案出现了另一个错误:您不能在观察者上下文中使用XXX,因为XXX仅是海龟/补丁。
我认为这是因为位于的补丁?您的原始代码有补丁
,而不是补丁
。如果需要绝对坐标(而不是相对偏移),则面片
是正确的;也许David在
处替换了补丁是无意的。@John当然,要使用我的代码,您必须修复您的代码,以便只有补丁调用半径内补丁的myprocedure
[pcolor]。
将返回一个颜色列表,而列表永远不能等于黑色
,所以这将永远打印false
。你是对的,我只是把他的代码翻译成我的。谢谢你的快速回答!问题是,您的解决方案出现了另一个错误:您不能在观察者上下文中使用XXX,因为XXX仅是海龟/补丁。
我认为这是因为位于的补丁?您的原始代码有补丁
,而不是补丁
。如果需要绝对坐标(而不是相对偏移),则面片
是正确的;也许David在
替换了补丁是无意的。@John当然,要使用我的代码,你必须修复你的代码,这样只有补丁调用myprocedure
,如果你想测试它们是否都是黑色的(而不是至少一个),用all?
替换any?
,谢谢你的快速回答!是的,这是有效的,它并不完全像我想的那样,但我认为这是我必须考虑的另一个问题。非常感谢!如果您想测试它们是否都是黑色(而不是至少一个),请将any?
替换为all?
谢谢您的快速回答!是的,这是有效的,它不完全是d