Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #49070 > unrolled thread

Is this PEP-able? fwhile

Started byjimjhb@aol.com
First post2013-06-24 15:52 -0400
Last post2013-06-26 17:40 +1000
Articles 4 — 4 participants

Back to article view | Back to comp.lang.python


Contents

  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

#49070 — Is this PEP-able? fwhile

Fromjimjhb@aol.com
Date2013-06-24 15:52 -0400
SubjectIs this PEP-able? fwhile
Message-ID<mailman.3757.1372103911.3114.python-list@python.org>

[Multipart message — attachments visible in raw view] — view raw

Syntax:


fwhile X in ListY and conditionZ:


The following would actually exactly as:  for X in ListY:


fwhile X in ListY and True:


fwhile would act much like 'for', but would stop if the condition after the 'and' is no longer True.


The motivation is to be able to make use of all the great aspects of the python 'for' (no indexing or explict
end condition check, etc.) and at the same time avoiding a 'break' from the 'for'.  


(NOTE:  Many people are being taught to avoid 'break' and 'continue' at all costs, so they instead convert
the clean 'for' into a less-clean 'while'.  Or they just let the 'for' run out.  You can argue against this teaching
(at least for Python) but that doesn't mean it's not prevalent and prevailing.)


[People who avoid the 'break' by functionalizing an inner portion of the loop are just kidding themselves and making
their own code worse, IMO.]


I'm not super familiar with CPython, but I'm pretty sure I could get this up and working without too much effort.
The mandatory 'and' makes sense because 'or' would hold the end value valid (weird) and not accomplish much.
The condition itself could of course have multiple parts to it, including 'or's.


It's possible the name 'fwhile' is not optimal, but that shouldn't affect the overall merit/non-merit of the concept.


Comments and Questions welcome.


Thanks.  

[toc] | [next] | [standalone]


#49134

FromNeil Hodgson <nhodgson@iinet.net.au>
Date2013-06-25 17:20 +1000
Message-ID<_JqdnQKrg4q12FTMnZ2dnUVZ_oydnZ2d@westnet.com.au>
In reply to#49070
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

    which would also make a python proposal that needs no new key words:

for i in range(n) while safe(i): ..

    The benefit of the syntax would be to concentrate the code 
expressing the domain of the loop rather than have it in separate locations.

    Not a big win in my opinion.

    Neil

[toc] | [prev] | [next] | [standalone]


#49218

FromDennis Lee Bieber <wlfraed@ix.netcom.com>
Date2013-06-25 20:47 -0400
Message-ID<mailman.3868.1372207668.3114.python-list@python.org>
In reply to#49134
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...
-- 
	Wulfraed                 Dennis Lee Bieber         AF6VN
    wlfraed@ix.netcom.com    HTTP://wlfraed.home.netcom.com/

[toc] | [prev] | [next] | [standalone]


#49232 — Re: Is this PEP-able? fwhile

FromChris Angelico <rosuav@gmail.com>
Date2013-06-26 17:40 +1000
SubjectRe: Is this PEP-able? fwhile
Message-ID<mailman.3878.1372232458.3114.python-list@python.org>
In reply to#49134
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

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web