简单的NetLogo setxy用于坐标列表

时间:2012-11-08 18:50:02

标签: foreach netlogo

出于某种原因,我在要求海龟去列表中的xy坐标时失败了。 我已经尝试了几种方法,虽然我可以看出为什么其中一些是错的但我无法确定哪些是正确的。

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

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

理想,我想将列表设置为可变的,例如设置mylist [[0 1] [0 2] ...] 但是我不知道如何重复这些项目。

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

1 个答案:

答案 0 :(得分:4)

首先,您的示例代码应该可以正常工作,如果海龟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]])

正在得到类似的东西:

ASK expected input to be an agent or agentset but got NOBODY instead.

...因为您的代码正在尝试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 ]
])

如果您知道sort turtlesturtles代理人设置为一个列表而item允许您获取列表中的特定项目,则应该能够弄清楚它是如何工作的。

修改

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

编辑2:

一种更简单的方法,只有在您的海龟尚未创建时才会起作用:

clear-all
let coordinates [[-16 12] [-16 11] [-16 10] [-16 9]]
foreach coordinates [
  create-turtles 1 [ setxy item 0 ? item 1 ? ]
]