Luca G.
Luca G.

Reputation: 29

NETLOGO: adding lists of agents' attributes to a list of lists

Hello I am using Netlogo and I am trying to create a list of lists in which every sublist is a couple of agents' attributes. In particular I declare the list as a global variable and I initialize it to an empty list. Then I ask every agent to add a list of their attribute_1 and attribute_2 to the main list. Like this:

globals[mainlist]
set mainlist []
ask agents[
set mainlist sentence [mainlist] [attribute_1 attribute_2 ]
]

This should create a new list composed by the previous mainlist and the list [attribute_1 attribute_2]. Unfortunately this doesn't work and I get the error: EXPECTED LITERAL VALUE referring to "mainlist". How should I write my code to create my list of lists in the correct way?

Upvotes: 1

Views: 3158

Answers (2)

Nicolas Payette
Nicolas Payette

Reputation: 14972

Tyr's answer is technically correct, but I would like to suggest a more netlogoish way to do it. Usually, in NetLogo, you don't have to build lists one element at a time. If you find yourself doing that, you might want to stop and try to approach the problem differently.

In this particular case, you can simply take advantage of the of primitive:

[ (list attribute_1 attribute_2) ] of agents

Here is a fully working example:

breed [agents an-agent]
agents-own [attribute_1 attribute_2]
globals [mainlist]

to setup
  clear-all
  create-agents 10 [
    set attribute_1 random 10
    set attribute_2 random 10
  ]
  set mainlist [ (list attribute_1 attribute_2) ] of agents
  print mainlist
end

Upvotes: 5

nldoc
nldoc

Reputation: 1189

You can use lput or fput to add further elements to a list (lput will add the new list item at the end (l=last), whereas fput will add the new item at front (f=first)). Additionally, you have to use the (list ... ...) primitive instead of [ ] brackets when you want to store variables in a list (brackets only work with constants).

Here is a working example:

globals[mainlist]

to test
  ask n-of 20 patches [sprout 1]
  set mainlist []
  ask turtles 
  [
    set mainlist lput (list xcor ycor) mainlist  
  ]
  print mainlist
end

Upvotes: 3

Related Questions