Re: if statement not working

new topic     » goto parent     » topic index » view thread      » older message » newer message

On 22 Mar 2002, at 9:47, kbochert at ix.netcom.com wrote:

> 
> Hi David Cuny, you wrote on 3/22/02 7:04:39 AM:
> 
> >To reiterate:
> >
> >0. The goal is to write safe string handling code.
> >1. Slices (by themselves) are unsafe when working with strings.

Before someone nails down "type string", lets make all sequence handling 
safe, regardless of what's stored in it.

> >2. Guarded slices are unsafe because the guard isn't coupled to the string.
> >3.
> >Euphoria doesn't provide any built-in routines for creating substrings.

Unless you parse() the string (err, sequence) and such. Really, i mix what i 
think most people call "string" with nested sequences. I'd hate to see 
restrictions put on what can or cannot be a "string", Eu's strength is the 
sequence. For instance, if you nail down a string to be atoms of 1-255, you 
can't handle most of the world's language characters gracefully (old thread 
from yrs ago). This would hurt translation dictionaries for one, and could 
artificially restrict the countries that use Eu, as well as the knowledge 
domains that use it (like all those calculus and trig symbols).
 
> How about a new operator '=~' 

First thought: ~ like "fuzzy logic"? Hmmm, better write that as a real optional 
include at this point, Rob will never sign onto it.

> that acts like '=' except that it
> plows on ahead in the face of errors:
>     s =~ t[2..4]
>     -- s is padded to length 3 if necessary

Since you specified [2..3], why pad s some more? And with what? Better to 
look at what t actually has, and deliver what is in the envelope of [2..3] and 
no more. If [2..3] doesn't exist, then return {}. If you asked to borrow a book 
that i don't have, i won't pad out a empty box of non-existant book with some 
random selection of book parts.

>     if s[2..4] =~ '123' then
>     -- comparison fails if s is too short
>     -- (or uninitialized!)

In this case, if s is too short, it's not equal. You did a test there, not an 
extraction or assignment, it obviously fails, but shouldn't bomb the whole 
program. In mirc, if i do:
if ( $gettok(%address,2,$asc(.)) == ipt ) { whatever }
and %address has nothing in it this time, because of whatever, i expect this 
boolean test to fail, not the entire program. In Eu, i expect the whole program 
to crash horribly.

> I suppose the postfix '~' could also be applied elsewhere:
>     s = t[2..8]~  --s has 6 elements even if t has 4
> But I haven't thought too much about that.

Nononononono! In this case, if t has 6 elements, Eu should grab the [2..6] of 
them for s, making s have 5 elements.

Basically, if Eu would crash on it because of a length, either preemptively 
handle it, or grab the error Eu throws now, and deal with it intelligently.
Don't
add anything to it, because whatever you add might be tested for later on 
and cause an error. 

Kat

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu