我想在某个乌龟的变量TurtlesICanSee中添加一个海龟组,这取决于那些乌龟的属性.例如,在一个应用程序中,我想只将乌龟本身添加到TurtlesICanSee,在另一个应用程序中我想添加两个海龟(如果有的话)与相邻的who-numbers(乌龟自己的who-number +或-1) .
如果我可以通过使用who-numbers找出第一个应用程序,我想我可以将其扩展到第二个应用程序.但是,我无法弄清楚第一个.
我试过了
ask turtles [
set TheTurtlesICanSee turtles with [who = ([who] of self)]
]
但这填补了每只乌龟的每只乌龟的TheTurtlesICanSee.
我想我理解为什么; NetLogo认为我希望每个海龟x都具有与其自身(x)相同的人数,即每只乌龟.但我没有.对于每个海龟x我希望每个海龟y具有与x相同的人数.
谁能帮我这个?请注意,第一个应用程序所需的解决方案是可以推广到第二个应用程序的解决方案.因此,没有任何方法可以将乌龟添加到其自己的变量中.我需要一种涉及谁的自我引用形式(或者我不想这样做的好的论据,但最好是前者).
您的代码只需稍作改动即可,如下所示:
ask turtles [ set TheTurtlesICanSee turtles with [who = [who] of myself] ]
Run Code Online (Sandbox Code Playgroud)
注意替换myself为self; http://ccl.northwestern.edu/netlogo/docs/dictionary.html#myself对差异进行了解释.
但实际上没有必要涉及谁的数字.几乎没有必要在NetLogo中使用谁的数字; 几乎总是有一个更简单,更直接的解决方案.一个更简单的解决方案是:
ask turtles [ set TheTurtlesICanSee turtles with [self = myself] ]
Run Code Online (Sandbox Code Playgroud)
但实际上根本没有必要使用它with.我们可以使用turtle-set直接构建所需的代理集:
ask turtles [ set TheTurtlesICanSee (turtle-set self) ]
Run Code Online (Sandbox Code Playgroud)
这是我建议的解决方案,为了清晰和简洁,但也因为它将运行得更快,因为它不涉及迭代所有海龟的集合,正如with基于解决方案所做的那样.