But this difference in the setting up of variables is not merely a matter of technique. Along with it goes a considerable difference in the status of the two different types of variable created.
When an input to a procedure is assigned a name, this is a temporary expedient adopted only to guarantee that the input is processed correctly according to the instructions. For this reason, as soon as the procedure has carried out all of its instructions, the name is immediately discarded.
It is easy enough to check that this is indeed the case. First define line.space, as before, using :times to identify the input variable name. i.e:
to line.space :times repeat :times [print [ ] ] end
and then call the procedure with whatever input you like - e.g. type line.space 5.
As soon as line.space has displayed on screen the appropriate number of blank lines to match your input, straightway type print :times (or equivalently print thing "times) to see whether you can access the input variable and discover its value. You cannot. You will be told THERE IS NO NAME TIMES (or TIMES HAS NO VALUE). In other words, the variable no longer exists.
Variables created using the command make are, by contrast, always available - both to the user at toplevel and to any procedure. They form part of the general LOGO environment. Variables created with make behave as global variables. This is true whether make is itself invoked at toplevel - by the user typing an instruction at the keyboard - or invoked in an instruction within a procedure.
local "junk
In using this command, you declare that the "junk will be known as a variable name only within the current procedure (or procedures called by it). "junk is, in this respect, just like an input variable name.
The existence of local variables has implications for the behaviour of make. We noted above that variables created by make are global variables. This remains true. But when make is used within a procedure and takes as its first input the name of a pre-existing local variable - i.e. either an input variable or a variable which has been introduced with the command local - this variable remains local. In other words, make may change the value of an existing variable but it cannot change its status.
It is not difficult to subvert the new flexibility of line.space, for example, by changing the definition to:
to line.space :times make "times 2 repeat :times [print [ ] ] end
Although the consequences of the change seriously affect the workings of line.space, this particular use of make does not set up a new global variable "times. It sabotages line.space merely by altering the value of the local variable which is initially set up when the procedure begins to run.
While LOGO has no problem keeping the two variable names "times (and the two associated values) quite separate in its own mind, you might not be so successful in your own, especially in more convoluted situations. The best advice, therefore, is not to take advantage of LOGO's permissiveness but try to keep your global variable names distinct from the local variable names which you set up in defining procedures.
E-mail: ron.brasington@rdg.ac.uk