<div dir="ltr"><div>Summary:  Visual environments based on using</div><div>simple functions without using variables have been found</div><div>to be useful to introduce programming concepts to young</div><div>learners.  While Python is an ideal language for beginners,</div><div>the Python construct for iterations, namely</div><div><br></div><div>for var in range(n):</div><div>    # block</div><div>    # of</div><div>    # code</div><div><br></div><div>does require a variable and is needlessly complicated for</div><div>beginners.  A simpler construct like:</div><div><br></div><div>repeat n:    # n is a specific integer</div><div>    # block</div><div>    # of</div><div>    # code</div><div><br></div><div>would be useful to have in such contexts.  Other keywords could</div><div>be chosen instead of "repeat" used above.</div><div><br></div><div>====</div><div><br></div><div>For young (and perhaps not so young) students</div><div>visual environments are an ideal choice to learn programming.</div><div>A well-known example of a visual environment for beginners</div><div>is Karel the Robot, invented by Richard Pattis in 1981.</div><div>In this environment, a robot can perform a limited number</div><div>of basic functions which can be combined to create</div><div>complex tasks.</div><div><br></div><div>In the original Karel the Robot, variables were not</div><div>allowed.  However, new procedures could be created.</div><div><br></div><div>One essential concept that can be demonstrated in such worlds</div><div>is that of iterations.  In the original Karel, this was</div><div>done using the following syntax:</div><div><br></div><div>ITERATE n TIMES</div><div>    single_instruction</div><div><br></div><div>or</div><div><br></div><div>ITERATE n TIMES</div><div>    BEGIN</div><div>        single_instruction;</div><div>        other_instruction;</div><div>    END</div><div><br></div><div>where "n" is a specific integer.  In the above, indentation</div><div>has been introduced only to make the code easier to read.</div><div><br></div><div>A popular Python-like implementation of Pattis' idea</div><div>is Guido van Robot [1], also known as GvR. </div><div>In GvR, iteration is done as follows:</div><div><br></div><div>do n:</div><div>    # block</div><div>    # of</div><div>    # code indented like Python</div><div><br></div><div>To do something equivalent in Python requires to use:</div><div><br></div><div>for var in range(n):</div><div>    # block</div><div>    # of</div><div>    # code</div><div><br></div><div>which requires to use variables, which are not part of</div><div>the original Karel the Robot philosophy, as well as an</div><div>additional builtin function.  I would argue that,</div><div>for beginners, this is needlessly complicated.</div><div>A better alternative would be to use a similar</div><div>syntax to that used by Guido van Robot for this case.</div><div>This would require to either introduce a new keyword</div><div>(such as "do", "repeat", "iterate", or "loop")</div><div><br></div><div><div>repeat n:</div><div>    # block</div><div>    # of</div><div>    # code</div></div><div><br></div><div>An advantage of using one of these keywords would</div><div>be for easier readability (for English speakers).</div><div>The disadvantage is that some existing Python programs</div><div>might use variables with the names suggested</div><div>above.</div><div><br></div><div>An alternative would be to reuse the "for" keyword by </div><div>adding this new construct to the grammar:</div><div><br></div><div><div>for n:</div><div>    # block</div><div>    # of</div><div>    # code</div></div><div><br></div><div>This last choice, while perhaps not as immediately readable</div><div>to English speakers as some of the previous ones, would </div><div>have the advantage of not requiring any change to</div><div>any existing Python programs; it could thus be implemented</div><div>rather quickly without needing some transition</div><div>time and the use of the __future__ module.</div><div><br></div><div>There exists at least 4 different pure Python implementations of </div><div>Karel the Robot where this new construct could, in principle,</div><div>be immediately put to use:</div><div><br></div><div>RUR-PLE [2], Rurple NG [3], both of which are desktop versions,</div><div>Reeborg's World [4], a web version using Brython as a Python</div><div>interpreter, and Monty Karel [5], an Eclipse plugin which</div><div>is targeted at older students as it uses a not so simple</div><div>OOP syntax even for the simplest programs.  </div><div>Young learners using any of the first three such implementations</div><div>would likely benefit if they could learn programming first</div><div>using this simpler construct.</div><div><br></div><div>André Roberge<br></div><div><br></div><div>[1] Guido van Robot: <a href="http://gvr.sourceforge.net/documents/languageRef/gvr.html">http://gvr.sourceforge.net/documents/languageRef/gvr.html</a></div><div><br></div><div>[2] RUR-PLE: <a href="https://code.google.com/p/rur-ple/">https://code.google.com/p/rur-ple/</a></div><div><br></div><div>[3] Rurple NG: <a href="http://www.lshift.net/downloads/dev.lshift.net/paul/rurple/manual.html">http://www.lshift.net/downloads/dev.lshift.net/paul/rurple/manual.html</a></div><div><br></div><div>[4] Reeborg's World  documentation: <a href="http://reeborg.ca/docs/en/index.html">http://reeborg.ca/docs/en/index.html</a></div><div>    World itself: <a href="http://reeborg.ca/world.html">http://reeborg.ca/world.html</a></div><div>    Python tutorial: <a href="http://reeborg.ca/docs/begin_py_en/">http://reeborg.ca/docs/begin_py_en/</a></div><div><br></div><div>[5] Monty Karel: <a href="http://www.csis.pace.edu/~bergin/MontyKarel/MontyInEclipse.html">http://www.csis.pace.edu/~bergin/MontyKarel/MontyInEclipse.html</a></div><div><br></div><div><br></div></div>