为什么netlogo对邻居的乌龟计数不同?

时间:2017-08-29 07:57:38

标签: netlogo

当我运行以下两行时,我会得到不同的答案。有人知道为什么吗?第一个给出了我想要的答案:

ask turtles[
    let tempcol [color] of self
    show count (turtles-on neighbors4) with [color = tempcol]]

ask turtles[
    set nextcolor [color] of self
    let tempcol [color] of self
    show count (turtles-on neighbors4) with [color = [color] of self]]

1 个答案:

答案 0 :(得分:2)

你是对的,问题是使用self - 来自dictionary entry的原语:

  

"自"很简单;这意味着"我"。 "自己"意味着"要求的代理人   我要做我现在正在做的事。

简而言之,您希望在第二个示例中使用myself。目前,你的第二个例子就是说," turtles,显示邻居龟的数量,其颜色是自己的颜色"在那里你真的想说"海龟,显示颜色是我自己的颜色的邻居海龟的数量。"有关可能更清晰的示例,请查看此设置:

to setup
  ca
  crt 10 [
    set color red
    setxy random-xcor random-ycor
  ] 
  ask n-of 3 turtles [
    set color blue
  ]
 reset-ticks 
end

这会产生7只红海龟和3只蓝海龟。现在,如果您要求其中一只蓝龟显示与自身颜色相同的海龟数量,我们应该期望它返回值3.如果您使用self运行该代码,则返回的值是10-因为所有海龟的颜色都等于它们自己的颜色:

to self-compare

  ask one-of turtles with [ color = blue ] [
    print "'[color] of self' example:"
    show count turtles with [ color = [color] of self ]
  ]

end

如果您使用完全相同的代码但使用myself,则会返回我们期望的答案:

to myself-compare

  ask one-of turtles with [ color = blue ] [
    print "'[color] of myself' example:"
    show count turtles with [ color = [color] of myself ]
  ] 

end

我还要指出,几乎所有of self语句都是多余的 - 您应该能够将它们全部删除([color = [color] of self]]除外,您将更改为myself无论如何,请让你的代码像以前一样运行。