1. "case" or better? (2.6 suggestion mode)

I erm, don't erm, oh...   Sigh blink))

I recently found I had written this, to handle five distinct
functions; escape key (==Cancel), return key (==OK), pressing the OK
and Cancel buttons, and closing the window:

if msg = WM_CHAR then
		if wParam = VK_ESCAPE then
			id = PFcncl
			msg = WM_COMMAND
		elsif wParam = VK_RETURN then
			msg = WM_COMMAND
		end if
	end if
	if msg = WM_COMMAND then
		if id = PFcncl then 	-- cancel
			FaceIdx=InitFaceIdx
			PointIdx=InitPointIdx
			applyFont()
		-- else assume PFOK
		end if
		msg = WM_CLOSE
	end if
	if msg = WM_CLOSE then
		isFaceName = faces[FaceIdx]
		if FaceIdx>=5 then
			isPointSize = sizes[FaceIdx][PointIdx]
		end if
		setVisible(PFwin,False)
		return 1
	end if
	return 0



Of course, it works perfectly blink)
What I've done is repeatedly reset a controlling var to "fall through"

I perhaps naturally /thought/ I could rewrite it better using case,
but I couldn't. It was so appalling I refuse to post it here.

Three points sprang to mind:
 1) the main argument for case is the "fall through"
 2) the main argument against case is the "fall through" / forgetting
break.

 3) I vote No Thanks.

It just reminded me why case/select sucks.
Regards,
Pete

new topic     » topic index » view message » categorize

2. Re: "case" or better? (2.6 suggestion mode)

Pete Lomax wrote:

<big snip>

> Three points sprang to mind:
>  1) the main argument for case is the "fall through"
>  2) the main argument against case is the "fall through" / forgetting
> break.
>
>  3) I vote No Thanks.
>
> It just reminded me why case/select sucks.

It depends on the concrete way how the "case" statement is implemented.
Yes, in C, there is a "fall through" when "break" is not used.

But e.g. in PowerBASIC, there is no "break" (or equivalent) keyword:

year = 2001
select case year
   case 1900 to 1910, 1912
      print "Once upon a time ..."
   case 1960 to 1969
      print "In the sixties ..."
   case > 2000
      print "Recently ..."
   case else
      print "Hmm?"
end select

This is equivalent to
integer year
year = 2001
if (1900 <= year and year <= 1910) or year = 1912 then
   puts(1, "Once upon a time ...\n")
elsif 1960 <= year and year <= 1969 then
   puts(1, "In the sixties ...\n")
elsif year > 2000 then
   puts(1, "Recently ...\n")
else
   puts(1, "Hmm?\n")
end if


In PowerBASIC, there is no "fall through" possible at all.
Of course, when you say:
|  1) the main argument for case is the "fall through"

then there is no main argument for implementing the "case" statement
this way. blink

Regards,
   Juergen

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

3. Re: "case" or better? (2.6 suggestion mode)

Pete Lomax wrote:
> 
> 
> I erm, don't erm, oh...   Sigh blink))
> 
> I recently found I had written this, to handle five distinct
> functions; escape key (==Cancel), return key (==OK), pressing the OK
> and Cancel buttons, and closing the window:
> 
> }}}
<eucode>
> 	if msg = WM_CHAR then
> 		if wParam = VK_ESCAPE then
> 			id = PFcncl
> 			msg = WM_COMMAND
> 		elsif wParam = VK_RETURN then
> 			msg = WM_COMMAND
> 		end if
> 	end if
> 	if msg = WM_COMMAND then
> 		if id = PFcncl then 	-- cancel
> 			FaceIdx=InitFaceIdx
> 			PointIdx=InitPointIdx
> 			applyFont()
> 		-- else assume PFOK
> 		end if
> 		msg = WM_CLOSE
> 	end if
> 	if msg = WM_CLOSE then
> 		isFaceName = faces[FaceIdx]
> 		if FaceIdx>=5 then
> 			isPointSize = sizes[FaceIdx][PointIdx]
> 		end if
> 		setVisible(PFwin,False)
> 		return 1
> 	end if
> 	return 0
> </eucode>
{{{

> 
> 
> Of course, it works perfectly blink)
> What I've done is repeatedly reset a controlling var to "fall through"
> 
> I perhaps naturally /thought/ I could rewrite it better using case,
> but I couldn't. It was so appalling I refuse to post it here.
> 
> Three points sprang to mind:
>  1) the main argument for case is the "fall through"
>  2) the main argument against case is the "fall through" / forgetting
> break.
> 
>  3) I vote No Thanks.
> 
> It just reminded me why case/select sucks.
> Regards,
> Pete
> 
> 

Hi Pete,

Very interesting.  Can i ask why you want to have multiple if's
process the same message?

I think the argument *for* the 'case' statement is to have a single test
determine
where to jump in the program so you dont have to wait for 100 elsif's
to fail before you get to the 101'th elsif.
This of course can be done with routine id's at the expense of some
added program complexity.


Take care,
Al

And, good luck with your Euphoria programming!

My bumper sticker: "I brake for LED's"

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

4. Re: "case" or better? (2.6 suggestion mode)

On Sun, 03 Apr 2005 08:28:03 +0200, Juergen Luethje <j.lue at gmx.de>
wrote:

>It depends on the concrete way how the "case" statement is implemented.
>Yes, in C, there is a "fall through" when "break" is not used.
>
>But e.g. in PowerBASIC, there is no "break" (or equivalent) keyword:
Ah, I didn't know that, I've never used PB.

Pete

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

5. Re: "case" or better? (2.6 suggestion mode)

On Sat, 02 Apr 2005 23:09:48 -0800, Al Getz <guest at RapidEuphoria.com>
wrote:

>Very interesting.  Can i ask why you want to have multiple if's
>process the same message?

I'm not sure I understand your question. I suppose I could have
written:
procedure Cancel()
	FaceIdx=InitFaceIdx
	PointIdx=InitPointIdx
	applyFont()
end procedure
function Close()
	isFaceName = faces[FaceIdx]
	if FaceIdx>=5 then
		isPointSize = sizes[FaceIdx][PointIdx]
	end if
	setVisible(PFwin,False)
	return 1
end function
...
 	if msg = WM_CHAR and wParam = VK_ESCAPE then
		Cancel()
		return Close()
 	elsif (msg = WM_CHAR and wParam = VK_RETURN)
 	   or msg = WM_COMMAND then
 		if id = PFcncl then
 			Cancel()
 		end if
 		return Close()
 	elsif msg = WM_CLOSE then
 		return Close()
 	end if
 	return 0

Is that what you meant?


>I think the argument *for* the 'case' statement is to have a single test
>determine
>where to jump in the program so you dont have to wait for 100 elsif's
>to fail before you get to the 101'th elsif.
Any gain is only possible if you restrict the proposed case statement
to dealing with a range of n positive integers 1..n, where n must be
known at compile-time. Otherwise, in terms of performance, a case
statement is doomed to be no faster than a huge if/elsif statement,
especially if you want things like unbounded ranges (eg x>2000) or
default clauses, or be able to deal with things like windows messages,
or the dynamically-generated win32lib control-ids, even if they are
declared as "constants". Theoretically, it is not difficult to
optimise away the repeated loads if consecutive elsif clauses have the
same lhs, although I doubt Rob currently does this. I suspect you are
imagining a performance gain which is not going to materialise.

Regards,
Pete

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

6. Re: "case" or better? (2.6 suggestion mode)

-------------------------------1112546331
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit

 
In a message dated 4/3/2005 7:06:03 A.M. Mountain Standard Time,  
petelomax at blueyonder.co.uk writes:


>I think the argument *for* the 'case' statement is to have a  single test 
determine
>where to jump in the program so you dont have to  wait for 100 elsif's
>to fail before you get to the 101'th elsif.
Any  gain is only possible if you restrict the proposed case statement
to  dealing with a range of n positive integers 1..n, where n must be
known at  compile-time. Otherwise, in terms of performance, a  case




Case statements may be prettier than elsif but there really isn't   that much 
difference in appearance or speed. The process that is both neat and  fast is 
'vectored execution'. A variable causes the program to jump to the  proper 
location without evaluating a string of if/else/then statements or  
case/of/endof'/endcase statements. The programer does the evaluating when the 
program is
written instead of the machine each time the program is  executed.

-------------------------------1112546331
Content-Type: text/html; charset="US-ASCII"
Content-Transfer-Encoding: 8bit

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=US-ASCII">
<META content="MSHTML 6.00.2900.2604" name=GENERATOR></HEAD>
<BODY id=role_body style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Arial" 
bottomMargin=7 leftMargin=7 topMargin=7 rightMargin=7><FONT id=role_document 
face=Arial color=#000000 size=2>
<DIV>
<DIV>In a message dated 4/3/2005 7:06:03 A.M. Mountain Standard Time, 
petelomax at blueyonder.co.uk writes:</DIV>
<BLOCKQUOTE 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: blue 2px solid"><FONT 
  style="BACKGROUND-COLOR: transparent" face=Arial color=#000000 
  size=2><BR>&gt;I think the argument *for* the 'case' statement is to have a 
  single test determine<BR>&gt;where to jump in the program so you dont have to 
wait for 100 elsif's<BR>&gt;to fail before you get to the 101'th elsif.<BR>Any
  gain is only possible if you restrict the proposed case statement<BR>to 
  dealing with a range of n positive integers 1..n, where n must be<BR>known at 
  compile-time. Otherwise, in terms of performance, a 
case<BR><BR></FONT></BLOCKQUOTE></DIV>
<DIV></DIV>
<DIV>Case statements may be prettier than elsif but there really isn't&nbsp; 
that much difference in appearance or speed. The process that is both neat and 
fast is 'vectored execution'. A variable causes the program to jump to the 
proper location without evaluating a string of if/else/then statements or 
case/of/endof'/endcase statements. The programer does the evaluating when the 
program is written instead of the machine each time the program is 
executed.</DIV></FONT></BODY></HTML>

-------------------------------1112546331--

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

7. Re: "case" or better? (2.6 suggestion mode)

Eglenn4511 wrote:

>
> The process that is both neat and  fast is 
> 'vectored execution'. A variable causes the program to jump to the  proper 
> location without evaluating a string of if/else/then statements or  
> case/of/endof'/endcase statements. The programer does the evaluating when 
> the  program is written instead of the machine each time the program is
> executed.
> 

Very interesting, please elaborate. I am having trouble understanding how
this would work if a decision had to be made at run-time.

This seems common in Forth:

http://pfe.sourceforge.net/4thtutor/4thl3-3.htm

However, Forth still has if-else.

Regards,

Marc

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

8. Re: "case" or better? (2.6 suggestion mode)

-------------------------------1112561998
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit

 
In a message dated 4/3/2005 11:47:32 A.M. Mountain Standard Time,  
guest at RapidEuphoria.com writes:

The  programer does the evaluating when 
> the  program is written  instead of the machine each time the program is
> executed.
>  

Very interesting, please elaborate. I am having trouble understanding  how
this would work if a decision had to be made at run-time.

This  seems common in  Forth:

http://pfe.sourceforge.net/4thtutor/4thl3-3.htm

However,  Forth still has if-else.



Oh my :)  I am brand new to Euphoria and have done most of my  programming in 
Forth. I once wrote a program to help learn Morse code.  Originally, I used 
an if/elsif sequence as follows 
if c = 'e' or 'E' then
    dit()
elsif c = 't' or 'T' then
    dah()
elsif c = 'i' or 'I' then
    di() dah()
... etc
 
Then I saved a little space and time by converting alpha characters to  
uppercase.
This cut  the program size and increased its speed a little
 
Next I decided to try vectored execution. I defined each letter, aa() = di  
dah, bb() = da di di dit, ... etc. I then put aa() in position 65, bb() in  
position 66, etc in a table. noop was placed in each location for which there  
was no Morse code symbol. Sending the letter 'a' became code_table['a']
 
Finally, I got rid of the "aa() = di dah" etc statements. I converted them  
to binary numbers that represented dits and dahs. A dit was a '0' and a dah was 
 a '1'. 'A' became 110, 'b' was 10001, 'e' was 10, 't' was 11, etc. I worked 
out  the numbers and stored them in a table. In Euphoria, they would be stored 
as a  sequence. This reduced the program size and kept the speed. (For the 
curious,  the numbers were read from right to left. The most significant bit 
said that  a code symbol was represented. The numbers were shifted left after 
each  read and when c / 2 = 0 conversion was completed.)
 
I then learned that the program read text files as easily as it read  
keyboard input. I now wrote a program that I could use on Amateur Radio I hated
using a key to send Morse code but could type fairly well. The program sent  
perfect code which could never be said about me.

-------------------------------1112561998
Content-Type: text/html; charset="US-ASCII"
Content-Transfer-Encoding: 8bit

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=US-ASCII">
<META content="MSHTML 6.00.2900.2604" name=GENERATOR></HEAD>
<BODY id=role_body style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Arial" 
bottomMargin=7 leftMargin=7 topMargin=7 rightMargin=7><FONT id=role_document 
face=Arial color=#000000 size=2>
<DIV>
<DIV>In a message dated 4/3/2005 11:47:32 A.M. Mountain Standard Time, 
guest at RapidEuphoria.com writes:</DIV>
<BLOCKQUOTE 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: blue 2px solid"><FONT 
  style="BACKGROUND-COLOR: transparent" face=Arial color=#000000 size=2>The 
  programer does the evaluating when <BR>&gt; the&nbsp; program is written 
  instead of the machine each time the program is<BR>&gt; executed.<BR>&gt; 
  <BR><BR>Very interesting, please elaborate. I am having trouble understanding 
  how<BR>this would work if a decision had to be made at run-time.<BR><BR>This 
  seems common in 
  Forth:<BR><BR>http://pfe.sourceforge.net/4thtutor/4thl3-3.htm<BR><BR>However, 
  Forth still has if-else.<BR></FONT></BLOCKQUOTE></DIV>
<DIV></DIV>
<DIV>Oh my :) &nbsp;I am brand new to Euphoria and have done most of my 
programming in Forth. I once wrote a program to help learn Morse code. 
Originally, I used an if/elsif sequence as follows </DIV>
<DIV>if c = 'e' or 'E' then</DIV>
<DIV>&nbsp;&nbsp;&nbsp; dit()</DIV>
<DIV>elsif c = 't' or 'T' then</DIV>
<DIV>&nbsp;&nbsp;&nbsp; dah()</DIV>
<DIV>elsif c = 'i' or 'I' then</DIV>
<DIV>&nbsp;&nbsp;&nbsp; di() dah()</DIV>
<DIV>... etc</DIV>
<DIV>&nbsp;</DIV>
<DIV>Then I saved a little space and time by converting alpha characters to 
uppercase.</DIV>
<DIV>This cut&nbsp; the program size and increased its speed a little</DIV>
<DIV>&nbsp;</DIV>
<DIV>Next I decided to try vectored execution. I defined each letter, aa() = di 
dah, bb() = da di di dit, ... etc. I then put aa() in position 65, bb()&nbsp;in 
position 66, etc in a table. noop was placed in each location for which there 
was no Morse code symbol. Sending the letter 'a' became code_table['a']</DIV>
<DIV>&nbsp;</DIV>
<DIV>Finally, I got rid of the "aa() = di dah" etc statements. I converted them 
to binary numbers that represented dits and dahs. A dit was a '0' and a dah was 
a '1'. 'A' became 110, 'b' was 10001, 'e' was 10, 't' was 11, etc. I worked out 
the numbers and stored them in a table. In Euphoria, they would be stored as a 
sequence. This reduced the program size and kept the speed. (For the curious, 
the numbers were read from right to left. The most significant bit said that 
a&nbsp;code symbol was represented. The numbers were shifted left after each 
read and when c / 2 = 0 conversion was completed.)</DIV>
<DIV>&nbsp;</DIV>
<DIV>I then learned that the program read text files as easily as it read 
keyboard input. I now wrote a program that I could use on Amateur Radio I hated 
using a key to send Morse code but could type fairly well. The program sent 
perfect code which could never be said about me.</DIV></FONT></BODY></HTML>

-------------------------------1112561998--

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

9. Re: "case" or better? (2.6 suggestion mode)

> -------------------------------1112561998
> Content-Type: text/html; charset="US-ASCII"
> Content-Transfer-Encoding: 8bit
> 
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
> <HTML><HEAD>
> <META http-equiv=Content-Type content="text/html; charset=US-ASCII">
> <META content="MSHTML 6.00.2900.2604" name=GENERATOR></HEAD>
> <BODY id=role_body style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Arial"
>
> bottomMargin=7 leftMargin=7 topMargin=7 rightMargin=7><FONT id=role_document 
> face=Arial color=#000000 size=2>
> <DIV>
> <DIV>In a message dated 4/3/2005 11:47:32 A.M. Mountain Standard Time, 
> guest at RapidEuphoria.com writes:</DIV>
> <BLOCKQUOTE 
> style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: blue 2px solid"><FONT
>
>   style="BACKGROUND-COLOR: transparent" face=Arial color=#000000 size=2>The 
>   programer does the evaluating when <BR>> the  program is written 
>   instead of the machine each time the program is<BR>> executed.<BR>> 
>   <BR><BR>Very interesting, please elaborate. I am having trouble
>   understanding
>   how<BR>this would work if a decision had to be made at run-time.<BR><BR>This
>
>   seems common in 
>   Forth:<BR><BR><a
>   href="http://pfe.sourceforge.net/4thtutor/4thl3-3.htm">http://pfe.sourceforge.net/4thtutor/4thl3-3.htm</a><BR><BR>However,
>
>   Forth still has if-else.<BR></FONT></BLOCKQUOTE></DIV>
> <DIV></DIV>
> <DIV>Oh my :)  I am brand new to Euphoria and have done most of my 
> programming in Forth. I once wrote a program to help learn Morse code. 
> Originally, I used an if/elsif sequence as follows </DIV>
> <DIV>if c = 'e' or 'E' then</DIV>
> <DIV>    dit()</DIV>
> <DIV>elsif c = 't' or 'T' then</DIV>
> <DIV>    dah()</DIV>
> <DIV>elsif c = 'i' or 'I' then</DIV>
> <DIV>    di() dah()</DIV>
> <DIV>... etc</DIV>
> <DIV> </DIV>
> <DIV>Then I saved a little space and time by converting alpha characters to 
> uppercase.</DIV>
> <DIV>This cut  the program size and increased its speed a little</DIV>
> <DIV> </DIV>
> <DIV>Next I decided to try vectored execution. I defined each letter, aa() =
> di
> dah, bb() = da di di dit, ... etc. I then put aa() in position 65, bb() in 
> position 66, etc in a table. noop was placed in each location for which there 
> was no Morse code symbol. Sending the letter 'a' became code_table['a']</DIV>
> <DIV> </DIV>
> <DIV>Finally, I got rid of the "aa() = di dah" etc statements. I converted
> them
> to binary numbers that represented dits and dahs. A dit was a '0' and a dah
> was
> a '1'. 'A' became 110, 'b' was 10001, 'e' was 10, 't' was 11, etc. I worked
> out
> the numbers and stored them in a table. In Euphoria, they would be stored as a
>
> sequence. This reduced the program size and kept the speed. (For the curious, 
> the numbers were read from right to left. The most significant bit said that 
> a code symbol was represented. The numbers were shifted left after each 
> read and when c / 2 = 0 conversion was completed.)</DIV>
> <DIV> </DIV>
> <DIV>I then learned that the program read text files as easily as it read 
> keyboard input. I now wrote a program that I could use on Amateur Radio I
> hated
> using a key to send Morse code but could type fairly well. The program sent 
> perfect code which could never be said about me.</DIV></FONT></BODY></HTML>
> 




Please POST TEXT ONLY on EUforum !!!




Bernie

My files in archive:
w32engin.ew mixedlib.e eu_engin.e win32eru.ew

Can be downloaded here:
http://www.rapideuphoria.com/cgi-bin/asearch.exu?dos=on&win=on&lnx=on&gen=on&keywords=bernie+ryan

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

10. Re: "case" or better? (2.6 suggestion mode)

-------------------------------1112581633
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit

 
In a message dated 4/3/2005 5:18:52 P.M. Mountain Standard Time,  
guest at RapidEuphoria.com writes:


Please POST TEXT ONLY on EUforum  !!!




Was this statement directed to me?
 

-------------------------------1112581633
Content-Type: text/html; charset="US-ASCII"
Content-Transfer-Encoding: 8bit

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=US-ASCII">
<META content="MSHTML 6.00.2900.2604" name=GENERATOR></HEAD>
<BODY id=role_body style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Arial" 
bottomMargin=7 leftMargin=7 topMargin=7 rightMargin=7><FONT id=role_document 
face=Arial color=#000000 size=2>
<DIV>
<DIV>In a message dated 4/3/2005 5:18:52 P.M. Mountain Standard Time, 
guest at RapidEuphoria.com writes:</DIV>
<BLOCKQUOTE 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: blue 2px solid"><FONT 
  style="BACKGROUND-COLOR: transparent" face=Arial color=#000000 
  size=2><BR>Please POST TEXT ONLY on EUforum 
!!!<BR><BR></FONT></BLOCKQUOTE></DIV>
<DIV></DIV>
<DIV>Was this statement directed to me?</DIV>
<DIV>&nbsp;</DIV></FONT></BODY></HTML>

-------------------------------1112581633--

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

11. Re: "case" or better? (2.6 suggestion mode)

> Was this statement directed to me?

Considering this message was in HTML too, I'd assume so.

~Greg

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

12. Re: "case" or better? (2.6 suggestion mode)

>
> > Was this statement directed to me?
>
> Considering this message was in HTML too, I'd assume so.
>
> ~Greg
>

 It's possible Eglenn4511 at aol.com  doesn't *realize* that his/her posts are
being sent by aol in HTML.

Dan Moyer

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

13. Re: "case" or better? (2.6 suggestion mode)

Eglenn4511 wrote:

> In a message dated 4/3/2005 5:18:52 P.M. Mountain Standard Time,
> guest at RapidEuphoria.com writes:
>
>
> Please POST TEXT ONLY on EUforum  !!!
>
>
> Was this statement directed to me?

I think so. Here is some additional information:
http://www.efn.no/html-bad.html

Also, please quote correctly, so that it becomes clear who wrote what:
http://www.netmeister.org/news/learn2quote.html

To Rob:
I think it would be helpful if Listfilter automatically checks whether
a mail contains HTML, and send the author an appropriate private message
if required.

Regards,
   Juergen

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

Search



Quick Links

User menu

Not signed in.

Misc Menu