On 10/10/2012, at 2:15 PM, Dobes Vandermeer wrote:

> Didn't you recently add the "as" syntax which would allow, for example:
> 
> if test1 as x1 do
> 
> elif test2 as x2 do
> 
> elif test3 as x3 do
> 
> done
> 
> ?
> 
> This probably eliminates the nested else if 90% of the time without adding to 
> the language.

That only works with expressions. The word "test1" above should be viewed as a 
sequence of computations rather than a single function/generator.

It's an issue in Felix that it has both statements and expressions and a lot
of stuff needs to be duplicated.

The actual code I was writing now looks like this:

  for line in split (lines,char "\n") do
    ++count;
    var commentry = Match (scomment, StringPiece line, 0, ANCHOR_BOTH, 
vcomment.stl_begin, 2);
    if commentry do
       comments = list (vcomment . 1 . string.strip);
    otherwise

    commentry = Match (ccomment, StringPiece line, 0, ANCHOR_BOTH, 
vcomment.stl_begin, 2);
    if commentry do
       comments = Cons (vcomment . 1 . string.strip, comments);
    otherwise

    var m = Match (grexp, StringPiece line, 0, ANCHOR_BOTH, v.stl_begin,n); 
    if m do
      var sym = v.3.string;
      var dfn = "";
      var m2 = Match (extract, StringPiece line, 0, ANCHOR_BOTH, v2.stl_begin, 
n2);
      if m2 do
        m2 = Match (extract, StringPiece line, 0, ANCHOR_BOTH, v2a.stl_begin, 
n2);
        if m2 do
          dfn = v2a . 1 . string . strip;
        else
          dfn = v2 . 1 . string . strip;
        done
      else
        dfn = line . strip;
      done
      if ishtml do
        if prefix (dfn, "class") do
          println$  f"%04d" count + ":  " + '<a href="'+href+'#'+f"%04d" 
count+'">'+dfn +'</a>';
          for cline in comments do println cline; done
          comments = Empty[string];
        else
          println$ f"%04d" count + ":    " + '<a href="'+href+'#'+f"%04d" 
count+'">'+ dfn +'</a>';
          for cline in comments do println cline; done
          comments = Empty[string];
        done
      else
        if prefix (dfn, "class") do
          println$ f"%04d" count + ":  " + dfn;
          for cline in comments do println$ "      "+cline; done
          comments = Empty[string];
        else
          println$ f"%04d" count + ":    " + dfn;
          for cline in comments do println$ "      "+ cline; done
          comments = Empty[string];
        done
      done
    done
  done

Before "otherwise" the third match had to be indented twice and we had
two more "done"s at the end.

Of course in *this* case we might say

        if Match .. 

And of course I could write, for example:

        dfn = if m2 then v2a else v2 endif . 1 . string . strip

or even better if I used expressions instead of statements.

--
john skaller
skal...@users.sourceforge.net
http://felix-lang.org




------------------------------------------------------------------------------
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to