1. RE: Case/switch
- Posted by "C. K. Lester" <cklester at yahoo.com> Feb 15, 2002
- 460 views
SR.Williamson wrote: > So there are a lot of > "if button1 = leftedge or button2 = rightedge" kind of stuff. > It got really tedious. The only think I could think was "This > would be so much easier with a Case statement". I've developed a game where, not only do I have to check for "being on the edge" of the playfield, but also if next to a pit, next to a wall, next to another player, etc., etc... To me, it wasn't so tedious, so your example, to me, is even easier/more not-so-tedious.
2. RE: Case/switch
- Posted by Matthew Lewis <matthewwalkerlewis at YAHOO.COM> Feb 15, 2002
- 431 views
> -----Original Message----- > From: SR.Williamson [mailto:writeneu at hotmail.com] > Kat brought up case/switch. I'd love to see this become part of the > language. > > I was writing an artificial life program for Windows. > Basically, it was > a bunch of buttons in a grid. If a button was "hot", the > program would > check to see whether the button in the row above and to > either side was > "hot" to determine whether to make that button itself "hot". > > Well, as you can imagine, that works fine for the buttons in > the middle > of the grid. But when you get to the buttons in the grid > above, you have > to check to see if a button is at a window edge. So there are > a lot of > "if button1 = leftedge or button2 = rightedge" kind of stuff. It got > really tedious. The only think I could think was "This would > be so much > easier with a Case statement". > > Is there some easy way to do that that I'm missing? My typical method for eliminating large if/elsif (ie, case) structures is using routine_id. Then you can set up your condition[s] and the code to handle said conditions in an associative list. It's easy to add or delete cases this way, and you don't end up with a massive piece of code for which you can't easily follow the flow/decision process. Your example might look something like: sequence condition, result condition = { middle, leftedge, rightedge, topedge, bottomedge } result = { routine_id("do_middle"),.....} Then, for your decision: case = find( situation, condition ) call_proc( result[case] ) Matt Lewis
3. RE: Case/switch
- Posted by Kat <gertie at PELL.NET> Feb 15, 2002
- 438 views
On 15 Feb 2002, at 13:46, Matthew Lewis wrote: > > > > -----Original Message----- > > From: SR.Williamson [mailto:writeneu at hotmail.com] > > > Kat brought up case/switch. I'd love to see this become part of the > > language. > > > > I was writing an artificial life program for Windows. > > Basically, it was > > a bunch of buttons in a grid. If a button was "hot", the > > program would > > check to see whether the button in the row above and to > > either side was > > "hot" to determine whether to make that button itself "hot". > > > > Well, as you can imagine, that works fine for the buttons in > > the middle > > of the grid. But when you get to the buttons in the grid > > above, you have > > to check to see if a button is at a window edge. So there are > > a lot of > > "if button1 = leftedge or button2 = rightedge" kind of stuff. It got > > really tedious. The only think I could think was "This would > > be so much > > easier with a Case statement". > > > > Is there some easy way to do that that I'm missing? > > My typical method for eliminating large if/elsif (ie, case) structures is > using routine_id. Then you can set up your condition[s] and the code to > handle said conditions in an associative list. It's easy to add or delete > cases this way, and you don't end up with a massive piece of code for which > you > can't easily follow the flow/decision process. > > Your example might look something like: > > sequence condition, result > > condition = { middle, leftedge, rightedge, topedge, bottomedge } > result = { routine_id("do_middle"),.....} > > Then, for your decision: > > case = find( situation, condition ) > call_proc( result[case] ) Shouldn't this be in the official Eu help files? Karl, if this can be done in two lines of Eu, wouldn't it be easy as a command alias in the native code? Kat
4. RE: Case/switch
- Posted by kbochert at ix.netcom.com Feb 15, 2002
- 415 views
-------Phoenix-Boundary-07081998- Hi Kat, you wrote on 2/14/02 11:21:23 AM: > >On 15 Feb 2002, at 13:46, Matthew Lewis wrote > > -----Original Message----- > > From: SR.Williamson [mailto:writeneu at hotmail.com] > > Your example might look something like: > > sequence condition, result > > condition = { middle, leftedge, rightedge, topedge, bottomedge } > result = { routine_id("do_middle"),.....} > > Then, for your decision: > > case = find( situation, condition ) > call_proc( result[case] ) > >Shouldn't this be in the official Eu help files? Karl, if this can be done >in two >lines of Eu, wouldn't it be easy as a command alias in the native code? > What you really have here is a single function call: switch (situation, condition, result) which does the 2 lines in question. One improvement might be to combine the condition and result arrays into one: sequence mycases = {{middle, routine_id (do_middle)} , (top, routine_id (do_proc)} ... } Then write a switch procedure: switch (situation, mycases) All of which, to my mind, shows the versatility of Euphoria but misses the point of the real switch statement-- the close coupling between the 'case' and the executed code. For source code hackers I would suggest two approaches: 1) Simple renaming for clarity: switch var_x case 3: case 4: ... end switch Which would be exactly equivalent to: if var_x = 3 then elsif var_x = 4 then ... end if 2) The addition of a new opcode which does a direct branch through a table. There are some tough issues in the generation of a table -- for instance: switch x case 1: case 120000: Karl -------Phoenix-Boundary-07081998---