如何从Netlogo中的代理创建一个简化的属性列表?

时间:2019-04-03 18:51:27

标签: list netlogo

我用以下内容定义了我的海龟。

turtles-own[val1, posx,posy,value]

我定义了名为

的全局变量

xlist    ylist    vallist

我开始空了。 现在,我想为任何乌龟创建一个具有一个值的列表。

我做到了

to fillLists 
 set xlist lput posx xlist
 set ylist lput posy ylist
 set vallist lput value vallist
end 

这称为:

 ask turtles[fillLists]

例如,如果我有3只以val1命名的海龟, 假设我们有:

t1 =[Mike, 1, 10, 100]
t2 =[Sasha, 2, 20, 200]
t3 =[Rocco, 3, 30, 300]

我想创建列表l1,l2,l3,l4。 内容在哪里:

l1= [Mike, Sasha, Rocco]
l2= [1,2,3]
l3= [10,20,30]
l4= [100,200,300].

但是我尝试的方法不起作用。因为列表返回空。 发生了什么,是一些错误吗?

1 个答案:

答案 0 :(得分:1)

我无法重现您的错误,因此您可能需要在调用这些命令的地方添加更多代码。例如,如果我按以下定义运行setup

globals [ nameslist xlist ylist vallist ]
turtles-own [ val1 posx posy value ]

to setup
  ca
  set nameslist []
  set xlist []
  set ylist []
  set vallist []

  crt 1 [ set val1 "Mike" set posx 1 set posy 10 set value 100 ]
  crt 1 [ set val1 "Sasha" set posx 2 set posy 20 set value 200 ]
  crt 1 [ set val1 "Rocco" set posx 3 set posy 30 set value 300 ]

  ask turtles [ fill-lists ]

  print nameslist
  print xlist
  print ylist
  print vallist  
  reset-ticks
end

to fill-lists
  set nameslist lput val1 nameslist
  set xlist lput posx xlist 
  set ylist lput posy ylist
  set vallist lput value vallist
end

我得到如下输出:

[Mike Rocco Sasha]
[1 3 2]
[10 30 20]
[100 300 200]

但是,您可能会发现,仅使用of来查询海龟中您感兴趣的变量会更简单。例如,下面的代码或多或少地完成了相同的输出,尽管其使用可能取决于您的需要:

turtles-own [ val1 posx posy value ]

to setup
  ca

  crt 1 [ set val1 "Mike" set posx 1 set posy 10 set value 100 ]
  crt 1 [ set val1 "Sasha" set posx 2 set posy 20 set value 200 ]
  crt 1 [ set val1 "Rocco" set posx 3 set posy 30 set value 300 ]

  print [val1] of turtles
  print [posx] of turtles
  print [posy] of turtles
  print [value] of turtles

  reset-ticks
end

输出:

[Sasha Mike Rocco]
[2 1 3]
[20 10 30]
[200 100 300]