在NetLogo中,是';与';问的一种形式?

在NetLogo中,是';与';问的一种形式?,netlogo,Netlogo,使用以下代码: breed [girls girl] ;pink breed [boys boy] ;green to go clear-all create-girls 10 [move-to one-of patches] create-boys 10 [move-to one-of patches] end 我期待下一行让女孩显示同一颜色男孩的数量,即“显示同一颜色男孩的数量等于我的颜色”: 但事实上,这对每个男孩都很重要。这是执行此任务的代码: ask girls [show cou

使用以下代码:

breed [girls girl] ;pink
breed [boys boy] ;green

to go
clear-all
create-girls 10 [move-to one-of patches]
create-boys 10 [move-to one-of patches]
end
我期待下一行让女孩显示同一颜色男孩的数量,即“显示同一颜色男孩的数量等于我的颜色”:

但事实上,这对每个男孩都很重要。这是执行此任务的代码:

ask girls [show count boys with [color = [color] of myself]]
为什么赛尔夫(我)指的是男孩,而我(问我的乌龟)指的是女孩?关键字“with”是不是让孩子们做点什么,这就是为什么要转换它?

简短回答:是的

ask
with
原语都使用在特定代理上下文中运行的“代码块”(由
[
]
分隔的部分)。在该块内,
self
指的是当前代理(来自块上下文的代理),而我指的是“外部”代理(在其上下文中调用了
with
ask

ask
with
之间的主要区别在于
ask
接受一个命令块(最有可能执行某项操作的块),而
with
接受一个报告程序块(只返回值的块)

请注意,
with
并不是使用报告程序块的唯一原语:
of
是另一种常见情况。使用上一个示例的变体:

ask girls [
  show [color = [color] of myself] of boys
]
将让每个女孩显示一个布尔值列表(列表中每个男孩一个值,按随机顺序):
true
如果男孩与女孩的颜色相同,
false
否则

ask girls [
  show [color = [color] of myself] of boys
]