用于坐标列表的简单 NetLogo setxy

Don*_*ied 1 foreach netlogo

出于某种原因,我在要求海龟转到列表中的 xy 坐标方面非常失败。我尝试了几种方法,虽然我明白为什么其中一些方法是错误的,但我无法确定什么是正确的。

(foreach [ 1 2 3 4] [-16 -16 -16 -16] [12 11 10 9] [问乌龟 ?1 [setxy ?2 ?3 ]])

*在此之后,我可以为每个命令设置一个命令列表,例如 setxy 但这似乎是一种浪费。另外,我想通过某个变量而不是列表中的项目来调用乌龟。

理想情况下,我想将列表设置为变量,例如 set mylist [[0 1] [0 2]...] 但我不确定如何遍历项目。

http://ccl.northwestern.edu/netlogo/docs/dictionary.html#foreach

Nic*_*tte 6

好吧,首先,如果海龟 1、2、3 和 4 存在,您的示例代码应该可以工作。NetLogo 中的海龟是从 索引的0,所以我怀疑你可能正在做这样的事情:

create-turtles 4
(foreach [1 2 3 4] [-16 -16 -16 -16] [12 11 10 9] [ask turtle ?1 [setxy ?2 ?3]])
Run Code Online (Sandbox Code Playgroud)

并且正在得到类似的东西:

ASK expected input to be an agent or agentset but got NOBODY instead.
Run Code Online (Sandbox Code Playgroud)

......因为你的代码试图ask一个turtle 4不存在的。将您的第一个列表更改为[0 1 2 3]可以解决该问题。

现在这是做你想做的事的最佳方式吗?我没有足够的信息来确定,但我怀疑您想要更接近的信息:

clear-all
let coordinates [[-16 12] [-16 11] [-16 10] [-16 9]]
create-turtles length coordinates
(foreach (sort turtles) coordinates [
  ask ?1 [ setxy item 0 ?2 item 1 ?2 ]
])
Run Code Online (Sandbox Code Playgroud)

如果您知道sort turtlesturtles代理集转换为列表并item允许您获取列表中的特定项目,那么您应该能够弄清楚它是如何工作的。

编辑:

create-turtles length coordinates而不是类似的事情create-turtles 4将确保您拥有与您定义的坐标数量相同的海龟数量,但这可能适用于您的情况,也可能不适用于您的情况。

编辑2:

更简单的方法是:

clear-all
let coordinates [[-16 12] [-16 11] [-16 10] [-16 9]]
foreach coordinates [
  create-turtles 1 [ setxy item 0 ? item 1 ? ]
]
Run Code Online (Sandbox Code Playgroud)