If statement Netlogo-ifelse语句

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

我在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_半径
是介于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