The expressions known as pseudo-variables are special read-only variables that are not declared anywhere (at least not in a species), and which represent a value that changes depending on the context of execution.
The pseudo-variable self
always holds a reference to the agent executing the current statement.
friend
attribute of another random agent of the same species to self
and conversely):friend potential_friend <- one_of (species(self) - self);
if potential_friend != nil {
potential_friend.friend <- self;
friend <- potential_friend;
}
myself
plays the same role as self
but in remotely-executed code (ask
, create
, capture
and release
statements), where it represents the calling agent when the code is executed by the remote agent.
ask first (species (self)){
color <- myself.color;
}
create species (self) number: 10 {
energy <- myself.energy / 10.0;
loop times: 4 {
heading <- towards (myself);
do move;
}
}
each
is available only in the right-hand argument of iterators. It is a pseudo-variable that represents, in turn, each of the elements of the left-hand container. It can then take any type depending on the context.
list<string> names <- my_species collect each.name; // each is of type my_species
int max <- max(['aa', 'bbb', 'cccc'] collect length(each)); // each is of type string