1. goto's, and loops

Hi all,

Why is there no "goto" in Euphoria? It would be easy enough to implement,
and if you don't want to use it, you don't haveto. I've used it sparingly in
other languages, for the example below, for example. Maybe i am in a rut,
but i don't see an nice way to do this example in Euphoria, can you help,
please? ( Without making another procedure and all the vars global. )

loop1
some code
loop2
test var, maybe goto target
-- an "exit" here would get you out of loop2, not loop1
EndOfLoop1
more code
EndOfLoop2
:target

thanks,
Kat

new topic     » topic index » view message » categorize

2. Re: goto's, and loops

EU>Hi all,

EU>Why is there no "goto" in Euphoria? It would be easy enough to implement,
EU>and if you don't want to use it, you don't haveto. I've used it sparingly in
EU>other languages, for the example below, for example. Maybe i am in a rut,
EU>but i don't see an nice way to do this example in Euphoria, can you help,
EU>please? ( Without making another procedure and all the vars global. )

EU>loop1
EU>some code
EU>loop2
EU>test var, maybe goto target
EU>-- an "exit" here would get you out of loop2, not loop1
EU>EndOfLoop1
EU>more code
EU>EndOfLoop2
EU>:target

EU>thanks,
EU>Kat
Gotos allow spagetti-code. It's much more elegant to use procedures and
functions, and it is also easier to debug.

Jeffrey Fielding
JJProg at cyberbury.net
http://members.tripod.com/~JJProg/

new topic     » goto parent     » topic index » view message » categorize

3. Re: goto's, and loops

Hello,

Kat you wrote:

>Hi all,
>
>Why is there no "goto" in Euphoria? It would be easy enough to implement,
>and if you don't want to use it, you don't haveto. I've used it sparingly
>in
>other languages, for the example below, for example. Maybe i am in a rut,
>but i don't see an nice way to do this example in Euphoria, can you help,
>please? ( Without making another procedure and all the vars global. )
>
>loop1
>some code
>loop2
>test var, maybe goto target
>-- an "exit" here would get you out of loop2, not loop1
>EndOfLoop1
>more code
>EndOfLoop2
>:target
>
>thanks,
>Kat

well I could do this easily with a routine but lets try this:

integer i i = 0
while x do  -- loop1
  ..some_code..
  while y do  -- loop 2
    if test_var then
      exit
    end if
    if want_out_of_loop_2 then
      i = 1
    end if
  end while  -- end of loop 2
  if i then
    exit
  end if
  ..more_code..
end while  -- end of loop 1
..target..

hope this helps,
Lewis Townsend


_______________________________________________________________
Get Free Email and Do More On The Web. Visit http://www.msn.com

new topic     » goto parent     » topic index » view message » categorize

4. Re: goto's, and loops

Kat wrote:

> Maybe i am in a rut, but i don't see an nice way
> to do this example in Euphoria, can you help,
> please?

You could write:

   continue = 1
   while loop1 and continue do
      some code
      while loop2 do

         if test var then
            continue = 0
            exit
         end if

         more code

      end while

   end while

Or perhaps:

   exitFlag = 0
   while loop1 do
      some code
      while loop2 do

         if test var then
            exitFlag = 1
            exit
         end if

         more code

      end while

      if exitFlag then
         exit
      end if

   end while

-- David Cuny

new topic     » goto parent     » topic index » view message » categorize

5. Re: goto's, and loops

Another language I use, Progress 4GL, has a specialized variety of goto.
It uses the syntax "leave <blockname>" . Your example would be coded
thus...

loop1: repeat:
 some code
loop2: repeat:
 if var then leave loop1.
end. /* of loop2 */
  more code
end. /* of loop 1 */

The idea of named blocks of code might not be too difficult it add to
Euphoria, however name-space issues might arise.


cheers,
Derek Parnell
dparnell at bigpond.net.au
Melbourne, Australia

new topic     » goto parent     » topic index » view message » categorize

6. Re: goto's, and loops

On Thu, 29 Jul 1999, you wrote:
> Hi all,
>
> Why is there no "goto" in Euphoria? It would be easy enough to implement,
> and if you don't want to use it, you don't haveto. I've used it sparingly in
> other languages, for the example below, for example. Maybe i am in a rut,
> but i don't see an nice way to do this example in Euphoria, can you help,
> please? ( Without making another procedure and all the vars global. )

Let's see what you've written:

> loop1--------------
> something                  |
> loop2 -------------|---------
> test var, maybe goto      |                 |
> -- an "exit"                  |                 |
> EndOfLoop1----------               |
> more code                                      |
> EndOfLoop2------------------
> :target

Follow the lines. That's why
1. you  don't see gotos'  in all languages, and
2. you get a D on the assignment,
unless you can find a real life example where this construct works under all
test conditions, and cannot be replaced with simpler, properly nested code..

Irv

new topic     » goto parent     » topic index » view message » categorize

7. Re: goto's, and loops

Hi Kat,

If I read Rob (and the language) correctly, one of the guiding principles
of Euphoria is that a programmer shouldn't do something that others (or he
himself, later on) will find extremely difficult to understand, debug or
change. This is part of "the Euphorian philosopy" of coding, language design,
and programming in general.

Now, I've seen examples where gotos have been used in code without being at
all troublesome, fitting cleanly in the algorithm. But, the potential for
abuse with the goto statement is absolutely monstrous. Sure, it CAN be used
well; but remember the Euphorian philosophy. When I was introduced to the
concept of structured programming (while using BASIC), I started trying to
NOT use gotos, and it helped my coding. It was easier for me to remember
what my code did, and it helped organize my code into logical subsections.

Rob's decision to leave out the goto does have a number of advantages, and
fits with the Euphorian philosophy. Since using QBasic and becoming more
experienced with program flow, I haven't missed it. It might take some
getting used to, but you'll find that anything that can be done with a goto
can be done without; of course, in some cases the goto is just plain easier
to use. blink

As to your example... the short answer would be "redesign the algorithm,"
but that's not always desireable. One specific approach would be to leave
the code pretty much the way it is, but use local variables to store
certain states. The result would look something like:

   ConditionFlag = 0 -- this is FALSE

   for i = w to x do

       -- some code

      for j = y to z do
         if (s[i][j] = 0) then
            ConditionFlag = 1 -- this is TRUE
            exit
         end if
      end for

      if (not (ConditionFlag)) then
         -- more code
      end if

   end for


Hope this helps you out some...


Rod

----------
From:   Kat[SMTP:KSMiTH at PELL.NET]
Sent:   Thursday, July 29, 1999 10:49 AM
To:     EUPHORIA at LISTSERV.MUOHIO.EDU
Subject:        goto's, and loops

Hi all,

Why is there no "goto" in Euphoria? It would be easy enough to implement,
and if you don't want to use it, you don't haveto. I've used it sparingly in
other languages, for the example below, for example. Maybe i am in a rut,
but i don't see an nice way to do this example in Euphoria, can you help,
please? ( Without making another procedure and all the vars global. )

loop1
some code
loop2
test var, maybe goto target
-- an "exit" here would get you out of loop2, not loop1
EndOfLoop1
more code
EndOfLoop2
:target

thanks,
Kat

new topic     » goto parent     » topic index » view message » categorize

8. Re: goto's, and loops

Hmm.. doesn't look so good with a monospaced font:
I'll try again:

> > loop1--------------1
> > something
> > loop2 ----------------------2
> > test var, maybe goto
> > -- an "exit"
> > EndOfLoop1----------1
> > more code
> > EndOfLoop2------------------2
> > :target

Irv

new topic     » goto parent     » topic index » view message » categorize

9. Re: goto's, and loops

----- Original Message -----
From: Irv Mullins <irv at ELLIJAY.COM>
To: <EUPHORIA at LISTSERV.MUOHIO.EDU>
Sent: Thursday, July 29, 1999 12:58 PM
Subject: Re: goto's, and loops


> On Thu, 29 Jul 1999, you wrote:
> > Hi all,
> >
> > Why is there no "goto" in Euphoria? It would be easy enough to
implement,
> > and if you don't want to use it, you don't haveto. I've used it
sparingly in
> > other languages, for the example below, for example. Maybe i am in a
rut,
> > but i don't see an nice way to do this example in Euphoria, can you
help,
> > please? ( Without making another procedure and all the vars global. )
>
> Let's see what you've written:
>
> > loop1--------------
> > something                  |
> > loop2 -------------|---------
> > test var, maybe goto      |                 |
> > -- an "exit"                  |                 |
> > EndOfLoop1----------               |
> > more code                                      |
> > EndOfLoop2------------------
> > :target
>
> Follow the lines. That's why
> 1. you  don't see gotos'  in all languages, and
> 2. you get a D on the assignment,
> unless you can find a real life example where this construct works under
all
> test conditions, and cannot be replaced with simpler, properly nested
code..

/me looks all over for the aforementioned code that Irv wrote..

Ooops, i just threw that together, with the EndOfLoop1 and EndOfLoop2
swapped. But assuming i hadn't swapped them ( ie they were correctly
placed ), i don't see anything easier than David Cuny's code (thanks, David)
which used 2x as much screen space,, so a "goto" would have been easier and
prolly faster to execute. Granted that goto's *can* lead to spagetti code,
but they don't *force* you to write spagetti code. The lack of a goto can
lead to setting and testing and clearing exit variables. If we must use exit
variables in nested loops, this seems to say that there is no point in using
"while" (which test their var at the top of the loop) or "for" loops when
nesting, just use infinite loops ("if true then") and "exit"s,, `cause you
use the exit var anyways, hmm, i could get addicted to exit vars..  where
"exit" substitutes for a "goto -- remark at end of this loop". Ok, what
about "repeat-until" loops? I didn't see them in Euphoria either. It's a
"while-do" loop with the test at the end instead of the beginning. Yes,
there are ways around most, if not all, things missing in a language, but a
simple *local* goto, which wouldn't leave the procedure or function it is
in, would be nice. In my humble opinion. If there was a vote i missed or
anything... etc..

Kat

new topic     » goto parent     » topic index » view message » categorize

10. Re: goto's, and loops

Kat wrote:

> Ok, what about "repeat-until" loops?


   repeat
      code here
   until test

would be:

   while 1 do
      code here
      if test then exit end if
   end while

Hope you like the one-line if statement. blink

-- David Cuny

new topic     » goto parent     » topic index » view message » categorize

11. Re: goto's, and loops

Kat wrote:

>Why is there no "goto" in Euphoria? It would be easy enough to implement,
>and if you don't want to use it, you don't haveto.

The "if you don't want to use it, you don't have to" argument has been
beaten to death here on the list by people proposing all sorts of things,
both good and bad. It's an extremely weak argument, easily countered by
"well, if we don't *have* to use it, we don't need it." And neither of these
arguments has anything to do with the actual idea in question -- they're
merely simplistic appeals to either add a new feature, just because; or not
to add a new feature, just because.

> I've used it sparingly in
>other languages, for the example below, for example. Maybe i am in a rut,
>but i don't see an nice way to do this example in Euphoria, can you help,
>please? ( Without making another procedure and all the vars global. )
>
>loop1
>some code
>loop2
>test var, maybe goto target
> -- an "exit" here would get you out of loop2, not loop1
>EndOfLoop1
>more code
>EndOfLoop2
>:target

Just from glancing at it, I'd say the logic is in need of some revision.
Here's my Euphorish pseudo-code version of what you have here:

 --------
while 1 do
   some code
   while 2 do
      if condition then
         goto target
      end if
   end while
   more code
end while

:target
 --------

The above example begs the following questions: why one loop inside of
another? Why have code both above and below this second loop, when it's
inside a while? Without actual code to fill in the example, it looks rather
artificial, not something one would actually code for real.

Despite your restriction that I not create another function, I'm going to
say that that's exactly what you need in this situation. I've found it's
almost always a bad idea to code one while loop inside another, no matter
what language you're using. Far better to code the second, nested while loop
in its own function. This forces you to decide which variables specifically
apply to only the nested loop, and it helps make things more understandable
later on.

 --------
function meaningful_name(object parms)
   while 1 do
      if condition then
         return 1 -- stop everything!
      end if
   end while
   return 0 -- keep going
end function

while 1 do
   some code
   if meaningful_name(parms) then
      exit
   end if
   more code
end while

 -- target
 --------

This works quite nicely without cluttering up the code too much. As you can
see, however, it's very difficult to come up with a nice, readable solution
without a specific idea of what's trying to be accomplished here. Again,
your example seems very artifical to me, as though it exists for no other
reason than to make your point about goto's seem valid. Please feel free to
prove me wrong -- give us a *specific* code example which you feel
illustrates the absolute *need* for goto's.


Be seeing you,
   Gabriel Boehme

new topic     » goto parent     » topic index » view message » categorize

12. Re: goto's, and loops

Kat wrote:

>Ok, what
>about "repeat-until" loops? I didn't see them in Euphoria either. It's a
>"while-do" loop with the test at the end instead of the beginning. Yes,
>there are ways around most, if not all, things missing in a language, but a
>simple *local* goto, which wouldn't leave the procedure or function it is
>in, would be nice. In my humble opinion. If there was a vote i missed or
>anything... etc..

You'll probably be shocked to hear this, but originally there wasn't even
a "for..next" loop in Euphoria--just "while..do"! From what I gather,
earlier on Euphoria had an even stronger "minimalist" approach than now:
only commands that were necessary, no redundancy. And since "for..next" can
be emulated with a "while" loop, it wasn't part of the language. Honestly
though, I think the addition of "for" was a good one; it added some
redundancy, but with good reason. I'm not sure I could make a good case for
adding the "repeat..until" loop though...

And I agree with you that a local goto would be nice. But I think not
allowing it is the better option. Just my opinion.


Rod

new topic     » goto parent     » topic index » view message » categorize

13. Re: goto's, and loops

Although I haven't worked on the program for awhile, I wondered about goto's
when trying to port the Rogue role-playing game from C to Euphoria as an
exercise.  Here is the original code:

main(argc, argv)
int argc;
char *argv[];
{
 /* Save the setuid we have got, then turn back into the player */
 saved_uid=geteuid();
 setuid(true_uid=getuid());

 if (init(argc, argv)) {  /* restored game */
  goto PL;
 }

 for (;;) {
  clear_level();
  make_level();
  put_objects();
  put_stairs();
  add_traps();
  put_mons();
  put_player(party_room);
  print_stats(STAT_ALL);
PL:
  play_level();
  free_stuff(&level_objects);
  free_stuff(&level_monsters);
 }
}

Notice the goto jumping into the middle of the loop so that the program can
handle a new game or a resumed game.
Now, here is the Euphoria.  Although it took me some figuring out, I think
that it is clearer than the C version.  If anyone has a better way of doing
it, though, I am willing to learn.

-- main()

 if init(command_line()) then -- restored game

   play_level()
   free_stuff(&level_objects) -- Note: didn't translate this yet!
   free_stuff(&level_monsters) -- Ditto!

 end if

 while TRUE do -- main loop BEGIN

  clear_level()
  make_level()
  put_objects()
  put_stairs()
  add_traps()
  put_mons()
  put_player(party_room)
  print_stats(STAT_ALL)
  play_level()
  free_stuff(&level_objects) -- didn't translate
  free_stuff(&level_monsters) -- ditto

 end while -- main loop END

-- end main()

Gee, I need to get back to work on this . . .  The hardest part is figuring
out all of the dependencies so that I can include stuff in the right order.
I guess that I just have to make a chart by hand, but if anyone has any
other useful tips they will be welcome.

new topic     » goto parent     » topic index » view message » categorize

14. Re: goto's, and loops

On Thu, 29 Jul 1999 21:35:24 -0700, Jason Gade <jgade at PCEZ.COM> wrote:

>Although I haven't worked on the program for awhile, I wondered about
goto's
>when trying to port the Rogue role-playing game from C to Euphoria as an
>exercise.  Here is the original code:
>
>main(argc, argv)
>int argc;
>char *argv[];
>{
> /* Save the setuid we have got, then turn back into the player */
> saved_uid=geteuid();
> setuid(true_uid=getuid());
>
> if (init(argc, argv)) {  /* restored game */

  SET NEW GAME FLAG                 >  goto PL;
> }
>
> for (;;) {

  IF ( NEW GAME ) {

>  clear_level();
>  make_level();
>  put_objects();
>  put_stairs();
>  add_traps();
>  put_mons();
>  put_player(party_room);
>  print_stats(STAT_ALL);

   }
                                      >PL:
>  play_level();
>  free_stuff(&level_objects);
>  free_stuff(&level_monsters);
> }
>}


Bernie

new topic     » goto parent     » topic index » view message » categorize

15. Re: goto's, and loops

WARNING: Pseudo-code follows.

A goto statement has two uses.

1. skip code.

  integer h -- file handle
  h = open("somefile", "r")
  if h = -1 then --file not opened
    goto Skip
  end if
  load_opened_file()

  :Skip
  do_other_things()

2. repeat code.

  :Repeat
    puts(1, "This keeps printing...")
  goto Repeat


Skip code can be accomplished with of the following if statements.
    if flag then
      do_code()
    end if

    if flag then
      do_code()
    else
      do_other_code()
    end if

    if flag1 then
      do_code1()
    elsif flag2 then
      do_code2()
    end if

    if flag1 then
      do_code1()
    elsif flag2 then
      do_code2()
    else
      do_other_code()
    end if

Repeat code is handled with a while loop.

  while 1 do
    do_code()
    if exit_now then
      exit
    end if
    do_more_code()
  end while

the exit can be placed anywhere and will only exit
that loop.  The only way to exit nested loops is with
flags for each loop.

integer end_loop1, end_loop2, end_loop3

end_loop1 = repeat(0, 3)

while 1 do --loop1
  while 1 do --loop2
    while 1 do --loop3
      end_loop1 = 1
      exit
    end while --end_loop3
    if end_loop1 or end_loop2 then
      exit
    end if
  end while --end_loop2
  if end_loop1 then
    exit
  end if
end while --end_loop1



        Lucius L. Hilley III
        lhilley at cdc.net   lucius at ComputerCafeUSA.com
+----------+--------------+--------------+----------+
| Hollow   | ICQ: 9638898 | AIM: LLHIII  | Computer |
|  Horse   +--------------+--------------+  Cafe'   |
| Software | http://www.cdc.net/~lhilley |  USA     |
+----------+-------+---------------------+----------+
                   | http://www.ComputerCafeUSA.com |
                   +--------------------------------+

new topic     » goto parent     » topic index » view message » categorize

16. Re: goto's, and loops

You know, I bet it would be real easy if someone wanted to write a Case
statement function...

case(
        testVar,
        {
         {Case of 1, result},
         {Case of 2, result},
         {Case of n, result}
        }
    )

where testVar is the value to be tested, "Case of x" is the value to be
compared, and "result" is the procedure ID or code to be run when the case
matches.

For instance:

myVar = 10
case(
        myVar,
        {
         {1, aFunction},
         {2, bFunction},
         {">3 AND <10", cFunction},
         {">10", dFunction}
        }
    )

case would probably need to be able to handle atoms or sequences (as above)
to handle everything.

At 12:15 PM 7/30/99 -0400, you wrote:
>WARNING: Pseudo-code follows.
>
>A goto statement has two uses.
>
>1. skip code.
>
>  integer h -- file handle
>  h = open("somefile", "r")
>  if h = -1 then --file not opened
>    goto Skip
>  end if
>  load_opened_file()
>
>  :Skip
>  do_other_things()
>
>2. repeat code.
>
>  :Repeat
>    puts(1, "This keeps printing...")
>  goto Repeat
>
>
>Skip code can be accomplished with of the following if statements.
>    if flag then
>      do_code()
>    end if
>
>    if flag then
>      do_code()
>    else
>      do_other_code()
>    end if
>
>    if flag1 then
>      do_code1()
>    elsif flag2 then
>      do_code2()
>    end if
>
>    if flag1 then
>      do_code1()
>    elsif flag2 then
>      do_code2()
>    else
>      do_other_code()
>    end if
>
>Repeat code is handled with a while loop.
>
>  while 1 do
>    do_code()
>    if exit_now then
>      exit
>    end if
>    do_more_code()
>  end while
>
>the exit can be placed anywhere and will only exit
>that loop.  The only way to exit nested loops is with
>flags for each loop.
>
>integer end_loop1, end_loop2, end_loop3
>
>end_loop1 = repeat(0, 3)
>
>while 1 do --loop1
>  while 1 do --loop2
>    while 1 do --loop3
>      end_loop1 = 1
>      exit
>    end while --end_loop3
>    if end_loop1 or end_loop2 then
>      exit
>    end if
>  end while --end_loop2
>  if end_loop1 then
>    exit
>  end if
>end while --end_loop1
>
>
>
>        Lucius L. Hilley III
>        lhilley at cdc.net   lucius at ComputerCafeUSA.com
>+----------+--------------+--------------+----------+
>| Hollow   | ICQ: 9638898 | AIM: LLHIII  | Computer |
>|  Horse   +--------------+--------------+  Cafe'   |
>| Software | http://www.cdc.net/~lhilley |  USA     |
>+----------+-------+---------------------+----------+
>                   | http://www.ComputerCafeUSA.com |
>                   +--------------------------------+

new topic     » goto parent     » topic index » view message » categorize

17. Re: goto's, and loops

This is a response to a question I asked about case statment.
from david.

Bernie

____________________________________________________________________________
_

Bernie Ryan wrote:

> Using a sequence of routine id's to make a case (switch)
> statement.

Here's a case statement:

   select case of a:
   case 1: foo()
   case 2: bar()
   case 3: grill
   end select

Here's the same code as an if statement:

   if    a = 1 then foo()
   elsif a = 2 then bar()
   elsif a = 3 then grill()
   end if


Here's the same code using routine_id:

   constant switch = {
      routine_id("foo"),
      routine_id("bar"),
      routine_id("grill") }

   if    a = 1 then call_proc( switch[1], {} )
   elsif a = 2 then call_proc( switch[2], {} )
   elsif a = 3 then call_proc( switch[3], {} )
   end if

The pattern in the if statement should be painfully obvious:

   constant switch = {
      routine_id("foo"),
      routine_id("bar"),
      routine_id("grill") }

   if a > 0 and a <= length( switch ) then
      call_proc( switch[a], {} )
   end if


Or you could use my handy-dandy in_range() function to make the code a bit
cleaner:

   if in_range( a, s ) then
      call_proc( switch[a], {} )
   end if

Sorry, couldn't resist. You can also write a switch procedure:

   procedure switch( integer i, sequence s )
      if i > 0 and i <= length( s ) then
         call_proc( s[i] )
   end procedure

This would work like this:

   switch( a, { "foo", "bar", "grill" } )

-- David Cuny

new topic     » goto parent     » topic index » view message » categorize

18. Re: goto's, and loops

Hi, Bernie.  All I got from your message was a quote of the C code.  Were
you going to add something?

-----Original Message-----
From: Bernie Ryan +ADw-bwryan+AEA-PCOM.NET+AD4-
To: EUPHORIA+AEA-LISTSERV.MUOHIO.EDU +ADw-EUPHORIA+AEA-LISTSERV.MUOHIO.EDU+AD4-
Date: Thursday, July 29, 1999 10:28 PM
Subject: Re: goto's, and loops


+AD4-On Thu, 29 Jul 1999 21:35:24 -0700, Jason Gade +ADw-jgade+AEA-PCEZ.COM+AD4-
wrote:
+AD4-
+AD4APg-Although I haven't worked on the program for awhile, I wondered about
+AD4-goto's
+AD4APg-when trying to port the Rogue role-playing game from C to Euphoria as an
+AD4APg-exercise.  Here is the original code:
+AD4APg-
+AD4APg-main(argc, argv)
+AD4APg-int argc+ADs-
+AD4APg-char +ACo-argv+AFsAXQA7-
+AD4APgB7-
+AD4APg- /+ACo- Save the setuid we have got, then turn back into the player
+ACo-/
+AD4APg- saved+AF8-uid+AD0-geteuid()+ADs-
+AD4APg- setuid(true+AF8-uid+AD0-getuid())+ADs-
+AD4APg-
+AD4APg- if (init(argc, argv)) +AHs-  /+ACo- restored game +ACo-/
+AD4-
+AD4-  SET NEW GAME FLAG                 +AD4-  goto PL+ADs-
+AD4APg- +AH0-
+AD4APg-
+AD4APg- for (+ADsAOw-) +AHs-
+AD4-
+AD4-  IF ( NEW GAME ) +AHs-
+AD4-
+AD4APg-  clear+AF8-level()+ADs-
+AD4APg-  make+AF8-level()+ADs-
+AD4APg-  put+AF8-objects()+ADs-
+AD4APg-  put+AF8-stairs()+ADs-
+AD4APg-  add+AF8-traps()+ADs-
+AD4APg-  put+AF8-mons()+ADs-
+AD4APg-  put+AF8-player(party+AF8-room)+ADs-
+AD4APg-  print+AF8-stats(STAT+AF8-ALL)+ADs-
+AD4-
+AD4-   +AH0-
+AD4-                                      +AD4-PL:
+AD4APg-  play+AF8-level()+ADs-
+AD4APg-  free+AF8-stuff(+ACY-level+AF8-objects)+ADs-
+AD4APg-  free+AF8-stuff(+ACY-level+AF8-monsters)+ADs-
+AD4APg- +AH0-
+AD4APgB9-
+AD4-
+AD4-
+AD4-Bernie
+AD4-

new topic     » goto parent     » topic index » view message » categorize

19. Re: goto's, and loops

If you look at the codeI sent you, you will see that I inserted something
into your code to show you that just adding an if statement would eliminate
the goto statement.
Bernie

new topic     » goto parent     » topic index » view message » categorize

20. Re: goto's, and loops

Sorry, Bernie, but I lost the message because of hw problems.  Can you
resend it??


-----Original Message-----
From: Bernie Ryan +ADw-bwryan+AEA-PCOM.NET+AD4-
To: EUPHORIA+AEA-LISTSERV.MUOHIO.EDU +ADw-EUPHORIA+AEA-LISTSERV.MUOHIO.EDU+AD4-
Date: Saturday, July 31, 1999 3:56 PM
Subject: Re: goto's, and loops


+AD4-If you look at the codeI sent you, you will see that I inserted something
+AD4-into your code to show you that just adding an if statement would eliminate
+AD4-the goto statement.
+AD4-Bernie
+AD4-

new topic     » goto parent     » topic index » view message » categorize

21. Re: goto's, and loops

On Sat, 31 Jul 1999 16:34:28 -0700, Jason Gade <jgade at PCEZ.COM> wrote:

>Sorry, Bernie, but I lost the message because of hw problems.  Can you
>resend it??
>-----Original Message-----

>
>main(argc, argv)
>int argc;
>char *argv[];
>{
> /* Save the setuid we have got, then turn back into the player */
> saved_uid=geteuid();
> setuid(true_uid=getuid());
>
> if (init(argc, argv)) {  /* restored game */

  SET NEW GAME FLAG                 >  goto PL;
> }
>
> for (;;) {

  IF ( NEW GAME ) {

>  clear_level();
>  make_level();
>  put_objects();
>  put_stairs();
>  add_traps();
>  put_mons();
>  put_player(party_room);
>  print_stats(STAT_ALL);

   }
                                      >PL:
>  play_level();
>  free_stuff(&level_objects);
>  free_stuff(&level_monsters);
> }
>}

Bernie

new topic     » goto parent     » topic index » view message » categorize

22. Re: goto's, and loops

Thanx, Bernie.  If I get back on that job I will see if that makes it more
clear.

new topic     » goto parent     » topic index » view message » categorize

23. Re: goto's, and loops

Hello,

Kat wrote:

>Ok, what
>about "repeat-until" loops? I didn't see them in Euphoria either. It's a
>"while-do" loop with the test at the end instead of the beginning.

Here is Euphoria's repeat-until loop

while not <expression> do
end while

Isn't it nice that a single construct can be used
for more than 1 job.  I always thought that BASIC's
do_until loop was redundant.

later,
Lewis Townsend


_______________________________________________________________
Get Free Email and Do More On The Web. Visit http://www.msn.com

new topic     » goto parent     » topic index » view message » categorize

24. Re: goto's, and loops

Hi all,
  If I remember right the only place to use a goto would be in an error
trapping routine where you would not want the routine to return back to the
next line after the error but instead break out and give an user error then
quit.  Other than that I cannot think of any structured modern day
programming language that promotes the use of goto's.  I would say that its
better programming practice to stay away from the goto keyword for both the
programmer writing the program and for others that are trying to figure out
what that programmer did.  As far as the loops go the only difference
between a while-do and repeat-until is one is pessimistic and the other is
optimistic.  I don't really think that this would matter one way or the
other, I guess it depends on how you think. That's my 2 centssmile

Thanks,
JKinsey

-----Original Message-----
From: Euphoria Programming for MS-DOS
[mailto:EUPHORIA at LISTSERV.MUOHIO.EDU]On Behalf Of Lewis Townsend
Sent: Monday, August 02, 1999 4:19 PM
To: EUPHORIA at LISTSERV.MUOHIO.EDU
Subject: Re: goto's, and loops


Hello,

Kat wrote:

>Ok, what
>about "repeat-until" loops? I didn't see them in Euphoria either. It's a
>"while-do" loop with the test at the end instead of the beginning.

Here is Euphoria's repeat-until loop

while not <expression> do
end while

Isn't it nice that a single construct can be used
for more than 1 job.  I always thought that BASIC's
do_until loop was redundant.

later,
Lewis Townsend


_______________________________________________________________
Get Free Email and Do More On The Web. Visit http://www.msn.com

new topic     » goto parent     » topic index » view message » categorize

25. Re: goto's, and loops

>>  If I remember right the only place to use a goto would be in an error
>>trapping routine where you would not want the routine to return back to
>>the next line after the error but instead break out and give an user
>>error then quit.  Other than that I cannot think of any structured modern
>>day

You don't need a goto for the above just print the error and
use the Euphoria abort.

Bernie

new topic     » goto parent     » topic index » view message » categorize

26. Re: goto's, and loops

Right I understand that this is true but that would mean that you would be
doing what is known as inline error checking in large programs you might
want to deploy an error handler which is centrally located and handles
multiple errors.  When I made the statement is was not directed to any one
programming language it is a general observation of several programming
languages.  Besides lets say that the error is not fatal and it is possible
for your application to continue by giving your user another option to use.
While yes you can use what you suggested and close the program but in an
event driven application you don't always know what the user is going to do
or what others programs are going to effect yours like MS *.dll's, not only
that but you don't want to duplicate code so send it to a central location
and handle the error.   So you must trap for all of these errors and if they
are fatal then yes have your program gracefully bow out with an error
message and abort but if not then let some error handler routines try to
work around the error or continue with the error by the above mentioned way.
That's where it might be prudent for the programmer to use a goto to bypass
code that your program knows will fail and use a different procedure to
perform the same method or prompt the user and ask what to do next for
example lets say that you are writing a routine for the user to open a file
and your program cannot find the file then you would send it to the error
handler with and error code and prompt the user for the file that is missing
then bypass the previous statement with a goto and continue to the next
procedure.  Most languages that are very event driven (ie..VB,Delphi, most
visual programming languages for GUI's) use these methods so that even with
an error the program can still successfully accomplish the job.

If there is any other questions about gotos you can reach me off the list at
jkinsey at bellsouth.net

Here is the deal.

A) don't assume that I know what I am talking about.
B) don't assume anything at all.
C) There is a reason why the developer of the language put every keyword in
the language
D) The easiest way only looks easy at first.
E) If you use a goto then heavily document your code so that even your dog
would understand what you are trying to accomplish and when you are finished
documenting it you will probably find that you didn't need it and replace it
with another structure anyway.
F) Keep an open mind the worst thing that you can do is go into a program
that has been written with gotos and start deleting everyone that you find
without reading the code.  especially if you are not used to reading gotos
and really hate them.
G) This comment is only here to finish the byte so that the last ones will
look like a word.

Thankssmile
JKinsey



-----Original Message-----
From: Euphoria Programming for MS-DOS
[mailto:EUPHORIA at LISTSERV.MUOHIO.EDU]On Behalf Of Bernie Ryan
Sent: Sunday, August 08, 1999 11:06 AM
To: EUPHORIA at LISTSERV.MUOHIO.EDU
Subject: Re: goto's, and loops


>>  If I remember right the only place to use a goto would be in an error
>>trapping routine where you would not want the routine to return back to
>>the next line after the error but instead break out and give an user
>>error then quit.  Other than that I cannot think of any structured modern
>>day

You don't need a goto for the above just print the error and
use the Euphoria abort.

Bernie

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu