Variables (Printable)

#### A note on using variables:

You can create new state variables for turtles, patches, and the observer. Whenever you create a new variable, StarLogo automatically creates a collection of new procedures to facilitate the use of the variable. For example, if you create the variable `age` for the turtles, then the turtles can use the procedure setage to change the value of the variable, and they can use the procedure age to access the value of the variable.

You create new variables with the commands turtles-own, patches-own, and globals. You can type these commands in either the turtle procedures window or the observer procedures window (but not both), like this:

> `turtles-own [age speed]` Creates turtle variables `age` and `speed`
> `patches-own [food]` Creates patch variable `food`
> `globals [time]` Creates global variable `time`

For turtle variables, the example age is used. For patch variables, the example food is used. And, for global variables, the example time is used. In order to use the commands listed below, you must first create the variables you want.

age [Turtle]

Returns the value of the caller's `age` variable.

age-at `xcor ycor` [Observer, Turtle]

Returns the value of the variable `age` of the turtles at `xcor ycor` relative to the caller.

age-of `turtle id number` [Observer, Turtle]

Returns the value of the variable `age` of the turtle with who number `turtle id number`.

age-towards `angle distance` [Observer, Turtle]

Returns a list of all the turtles and the values of their `age` variables which are at the patch `distance` away at angle `angle`.

food [Observer, Turtle]

Returns the value of the patch variable `food`.

NOTE: This is a patch command. It must be called from within an `ask-patches` statement.

food-at `xcor ycor` [Observer, Turtle]

Returns the value of the variable `food` of the patch at `xcor ycor` relative to the caller.

food-towards `angle distance` [Observer, Turtle]

Returns the value of the`food` variable of the patch `distance` away at angle `angle`.

let `variable value` [Observer, Turtle]

Declares `variable` as a local variable and assigns `value` to it. All variables must have names which begin with a colon. See the Variables page for more information on local variables.
Example:
let [:myvar 6]

set `variable value` [Observer, Turtle]

Assigns `value` to `variable`, where `variable` is a local variable which has already been declared. For more information on local variables, see the Variables page.

setage `anything` [Turtle]

Sets the turtle's `age` variable to `anything`.

setage-at `xcor ycor anything` [Observer, Turtle]

Sets the variable `age` of turtles at `xcor ycor` relative to the caller to `anything`.

setage-of `turtle id number anything` [Observer, Turtle]

Sets the variable `age` of turtle with who number `turtle id number` to `anything`.

setage-towards `angle distance anything` [Observer, Turtle]

Sets the variable `age` of turtles `distance` away at angle `angle` relative to the caller to `anything`.

setfood `anything` [Observer, Turtle]

Sets the variable `food` of patches to `anything`.

NOTE: This is a patch command. It must be called from within an `ask-patches` statement

setfood-at `xcor ycor anything` [Observer, Turtle]

Sets the variable `food` of the patch at `xcor ycor` relative to the caller to `anything`.

setfood-towards `angle distance anything` [Observer, Turtle]

Sets the variable `food` of the patch `distance` away at angle `angle` relative to the caller to `anything`.

settime `anything` [Observer]

Sets the value of the `globals` variable `time` to `anything`.

time [Observer]

Returns the value of the `globals` variable `time`.

Local Variables

Like `globals`, local variables are not associated with any specific patch or turtle. However, the exist only within the procedure within which they are declared.

Example:`
to check
let [:num who + color]
if :num > who * 2 [setc red]
end`

Parameters

Parameters are like local variables, in that they only exist during the procedure they are associated with. They are "declared" when the caller of procedure gives them a value.

Example:`
to move :number
fd :number
lt random 360
bk :number
rt random 360
end
to go
move 30
end`