Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #49232
| References | <mailman.3757.1372103911.3114.python-list@python.org> <_JqdnQKrg4q12FTMnZ2dnUVZ_oydnZ2d@westnet.com.au> <dbeks81ca4e3nkbmfdmkie92m93dkd345d@4ax.com> |
|---|---|
| Date | 2013-06-26 17:40 +1000 |
| Subject | Re: Is this PEP-able? fwhile |
| From | Chris Angelico <rosuav@gmail.com> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.3878.1372232458.3114.python-list@python.org> (permalink) |
On Wed, Jun 26, 2013 at 10:47 AM, Dennis Lee Bieber
<wlfraed@ix.netcom.com> wrote:
> On Tue, 25 Jun 2013 17:20:43 +1000, Neil Hodgson <nhodgson@iinet.net.au>
> declaimed the following:
>
>>jimjhb@aol.com:
>>
>>> Syntax:
>>> fwhile X in ListY and conditionZ:
>>
>> There is precedent in Algol 68:
>>
>>for i from 0 to n while safe(i) do .. od
>>
> The REXX variant would be
>
> do for i = 0 to n while safe(i)
> ...
> end
>
> Basically one has an optional "for" clause ( for index = initial to end
> by step ), and one has an optional while/until clause -- Hmm, wonder if
> some interpreters would parse both while and until <G>. I need to install
> Regina Rexx on this new machine...
Modulo the 'for' keyword, which is superfluous there. Here's a test
script I knocked up on my OS/2 box back home:
/* */
do i=0 to 9 while safe(i)
say i" is safe"
end
exit
safe: procedure
return arg(1)\=6
The \= in the last line is the REXX "not-equal" operator, like != in
Python. This outputs:
0 is safe
1 is safe
2 is safe
3 is safe
4 is safe
5 is safe
and then terminates. It's pretty clean; the DO/END construct defines a
block, and may optionally execute it more than once. With no
arguments, it just creates a block that executes once (equivalent to
C's braces); valid args include FOREVER (infinitely loop), WHILE
condition (iterate while condition is true), UNTIL condition (execute
once, then check condition, iterate while condition is false - like a
do/while in C), var=value (eg "I=1" - set var to value, then increment
by 1 or by the "BY" value, continue forever or until the "TO" value),
and possibly another that's slipped my mind. Aside from FOREVER, which
stands alone, they're completely independent.
But that's syntax, lots of it. What I'd like to see in Python is
simply a bit of flexibility in the rule about newlines. The for/if
construct in Python could be exactly the same as it now is, only with
the two statements on one line, and it would look very similar to the
existing notation. I can already one-line a simple statement:
for i in range(10): print(i)
I just can't put in an if:
>>> for i in range(10): if i%3: print(i)
SyntaxError: invalid syntax
But I can, as long as I use expression-if:
>>> for i in range(10): print(i) if i%3 else None
Seriously, I can use Perl-style notation to achieve this. Does that
seem right to you? *boggle*
ChrisA
Back to comp.lang.python | Previous | Next — Previous in thread | Find similar | Unroll thread
Is this PEP-able? fwhile jimjhb@aol.com - 2013-06-24 15:52 -0400
Re: Is this PEP-able? fwhile Neil Hodgson <nhodgson@iinet.net.au> - 2013-06-25 17:20 +1000
Re: Is this PEP-able? fwhile Dennis Lee Bieber <wlfraed@ix.netcom.com> - 2013-06-25 20:47 -0400
Re: Is this PEP-able? fwhile Chris Angelico <rosuav@gmail.com> - 2013-06-26 17:40 +1000
csiph-web