Kolbjørn Stuestøl wrote:
Continuing experimenting with LibreLogo.
Help for LibreLogo says that:
PRINT RANGE 3 10 3 ; print [3, 6, 9] (i.e. outputs 3, 6, 9.)
When I try it I get the output: "range (3 10 3)".
(Also "LABEL RANGE 3 10 3" and "TEXT RANGE 3 10 3" outputs "range (3 10
3)".)
I do not know Python programming. Is this the way Python handles lists?
Help call this a Python-like list generation.
It looks like the LibreLogo code is translated into Python code, and what you're seeing is a change between Python 2.7 and Python 3. In Python 2.7, range() returns a list of values, which would display as [3, 6, 9]. In Python 3, range() returns an iterable object, which will return each value in turn as you iterate over it (it doesn't actually create a list of all the values, so is more efficient for large ranges).
I expected that "PRINT RANGE 0 10 2" will output every second item in
the range: 0, 2, 4, 6, 8.
In Python, you should be able to get a list by using:
list(range(0, 10, 2))
I'm not sure how that would be done in Logo though; perhaps:
LIST RANGE 0 10 2
following the syntax you've shown in other examples.
On the other hand, the function
FOR :n IN RANGE 10 101 5 [
FORWARD :n LEFT 90
]
works as expected.
The "for" loop iterates over the iterator returned by range(), so executes the loop for each number which would have been in the list.
Am I misunderstanding the Help for RANGE or is the Help incorrect?
Perhaps the help is out of date, or perhaps it depends which version of Python you have. I don't know whether LibreLogo includes a Python interpreter or uses one you install separately.