Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #49070 > unrolled thread
| Started by | jimjhb@aol.com |
|---|---|
| First post | 2013-06-24 15:52 -0400 |
| Last post | 2013-06-26 17:40 +1000 |
| Articles | 4 — 4 participants |
Back to article view | Back to comp.lang.python
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
| From | jimjhb@aol.com |
|---|---|
| Date | 2013-06-24 15:52 -0400 |
| Subject | Is 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]
| From | Neil Hodgson <nhodgson@iinet.net.au> |
|---|---|
| Date | 2013-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]
| From | Dennis Lee Bieber <wlfraed@ix.netcom.com> |
|---|---|
| Date | 2013-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]
| From | Chris Angelico <rosuav@gmail.com> |
|---|---|
| Date | 2013-06-26 17:40 +1000 |
| Subject | Re: 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