Is this PEP-able? fwhile

Discussion in 'Python' started by jimjhb@aol.com, Jun 24, 2013.

  1. Guest

    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 allcosts, 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.
     
    , Jun 24, 2013
    #1
    1. Advertising

  2. On Tue, 25 Jun 2013 17:20:43 +1000, Neil Hodgson <>
    declaimed the following:

    >:
    >
    >> 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
    HTTP://wlfraed.home.netcom.com/
     
    Dennis Lee Bieber, Jun 26, 2013
    #2
    1. Advertising

  3. Re: Is this PEP-able? fwhile

    On Wed, Jun 26, 2013 at 10:47 AM, Dennis Lee Bieber
    <> wrote:
    > On Tue, 25 Jun 2013 17:20:43 +1000, Neil Hodgson <>
    > declaimed the following:
    >
    >>:
    >>
    >>> 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
     
    Chris Angelico, Jun 26, 2013
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Ian Kelly

    Re: Is this PEP-able? fwhile

    Ian Kelly, Jun 24, 2013, in forum: Python
    Replies:
    7
    Views:
    122
  2. Ian Kelly

    Re: Is this PEP-able? fwhile

    Ian Kelly, Jun 24, 2013, in forum: Python
    Replies:
    0
    Views:
    109
    Ian Kelly
    Jun 24, 2013
  3. Fábio Santos

    Re: Is this PEP-able? fwhile

    Fábio Santos, Jun 24, 2013, in forum: Python
    Replies:
    0
    Views:
    118
    Fábio Santos
    Jun 24, 2013
  4. Joshua Landau

    Re: Is this PEP-able? fwhile

    Joshua Landau, Jun 24, 2013, in forum: Python
    Replies:
    0
    Views:
    110
    Joshua Landau
    Jun 24, 2013
  5. Replies:
    0
    Views:
    93
Loading...

Share This Page