Post Reply 
Requesting ELSEIF
03-24-2017, 05:30 PM
Post: #1
Requesting ELSEIF
If you're taking suggestions for additions to HPPL, I'd like to propose the addition of ELSEIF (or ELIF). With lengthy IF-THEN structures, it can tighten up the code considerably.

Tom L
Current way (greatly trivialized example):

Code:
IF x>7 THEN
  PRINT("TOO HIGH");
ELSE
  IF X<4 THEN
    PRINT("TOO LOW");
  ELSE
    PRINT("JUST RIGHT");
  END;
END;

Now improved with ELSEIF

Code:
IF x>7 THEN
  PRINT("TOO HIGH");
ELSEIF X<4 THEN
  PRINT("TOO LOW");
ELSE
  PRINT("JUST RIGHT");
END;

Tom L
Cui bono?
Find all posts by this user
Quote this message in a reply
03-24-2017, 05:38 PM
Post: #2
RE: Requesting ELSEIF
(03-24-2017 05:30 PM)toml_12953 Wrote:  
Code:
IF x>7 THEN
  PRINT("TOO HIGH");
ELSE
  IF X<4 THEN
    PRINT("TOO LOW");
  ELSE
    PRINT("JUST RIGHT");
  END;
END;

Now improved with ELSEIF

Code:
IF x>7 THEN
  PRINT("TOO HIGH");
ELSEIF X<4 THEN
  PRINT("TOO LOW");
ELSE
  PRINT("JUST RIGHT");
END;

CASE blocks have similar logic to nested ELSE-IF blocks (exiting the block once a condition is met and relevant actions are executed). It doesn't make your code any shorter but can provide improved legibility.

Code:
CASE
  IF x>7 THEN PRINT("TOO HIGH"); END;
  IF x<4 THEN PRINT("TOO LOW"); END;
  PRINT("JUST RIGHT");
END;

Graph 3D | QPI | SolveSys
Find all posts by this user
Quote this message in a reply
03-24-2017, 06:21 PM (This post was last modified: 03-24-2017 07:17 PM by compsystems.)
Post: #3
RE: Requesting ELSEIF
I like the version ELSEIF. instead of using CASE

now with IFTE functional command version

PHP Code:
EXPORT elif(x)
BEGIN
  IFTE
(x>7,print("TOO HIGH"),IFTE(x<4,print("TOO LOW"),print("JUST RIGHT")));
END

A small survey.

you need an IFT() functional command? (without ELSE block)


PHP Code:
EXPORT ift(x)
BEGIN
  IFTE
(x>7,print("TOO HIGH"),IFT(x<4,print("TOO LOW")));
END
Find all posts by this user
Quote this message in a reply
03-24-2017, 06:52 PM
Post: #4
RE: Requesting ELSEIF
(03-24-2017 06:21 PM)compsystems Wrote:  I like the version ELSEIF. instead of using CASE

now with IFTE functional command version

A small survey.

you need an IFT() functional command?

I'm all for anything that makes my job easier. I actually make a living converting old programs (mostly BASIC) to run on Prime. I'd share them with the group but my employer owns everything I write relating to their business (even after hours!) I'd like both ELSEIF and IFTE. I'd also like user-defined datatypes (like records), printing and a whole bunch more. We can dream, can't we? Smile

Tom L

Tom L
Cui bono?
Find all posts by this user
Quote this message in a reply
03-24-2017, 07:16 PM
Post: #5
RE: Requesting ELSEIF
What kind toml_12953 of programs are you converting and where can you test them?
Find all posts by this user
Quote this message in a reply
03-24-2017, 07:33 PM
Post: #6
RE: Requesting ELSEIF
(03-24-2017 07:16 PM)compsystems Wrote:  What kind toml_12953 of programs are you converting and where can you test them?

I convert environmental programs. These were used for by our field workers for years on laptops and even some BASIC handhelds. We're equipping them with Primes now and I convert programs that monitor and analyze climate data (yes it really IS changing!) and do things like calculate how fast the liquid level in different shaped tanks such as underground tanks used by abandoned gas stations will go up or down based on the input or leakage (a lot of differential equations there). We also keep track of changing migratory patterns of birds and other animals. It's a lot of fun at times but sometimes converting the spaghetti code makes me want to hit the sauce! Smile Gee, C, Pascal and other languages have GOTO. Why can't Prime?

Tom L

Tom L
Cui bono?
Find all posts by this user
Quote this message in a reply
03-24-2017, 07:45 PM
Post: #7
RE: Requesting ELSEIF
(03-24-2017 06:21 PM)compsystems Wrote:  you need an IFT() functional command? (without ELSE block)

IFTE can be defined without ELSE

Viga C | TD | FB
Visit this user's website Find all posts by this user
Quote this message in a reply
03-24-2017, 08:16 PM
Post: #8
RE: Requesting ELSEIF
(03-24-2017 07:45 PM)Carlos295pz Wrote:  
(03-24-2017 06:21 PM)compsystems Wrote:  you need an IFT() functional command? (without ELSE block)

IFTE can be defined without ELSE

but only HOME PRG, for CAS fails

PHP Code:
EXPORT iftHOME(x)
BEGIN
 IFTE
(x>7,print("true"));
 return 
"Done";
END;

#cas
iftCAS(x):=
BEGIN
 IFTE
(x>7,print("true"));
 return 
"Done";
END;
#end 


iftHOME(8); returns "Done"
iftCAS(8); returns

"when(x>7,print(""true"")) in iftCAS(5) instruction #1 error, try debug(iftCAS(5))
Error: Bad Argument Type"
Find all posts by this user
Quote this message in a reply
03-25-2017, 11:43 AM
Post: #9
RE: Requesting ELSEIF
(03-24-2017 05:38 PM)Han Wrote:  CASE blocks have similar logic to nested ELSE-IF blocks (exiting the block once a condition is met and relevant actions are executed). It doesn't make your code any shorter but can provide improved legibility.

Just to show you, here's the actual ANSI/ISO BASIC statement statement I'm converting:

PHP Code:
IF (1) OR (2) OR (3THEN
circleellipse, or hyperbola
   LET Xo 
= -Dr/(2*Ar)
   
LET Yo = -Er/(2*Cr)
   PRINT 
"translation = {"USING$("-%.####",Xo); ", "USING$("-%.####",Yo); "}"
   
LET r(1) = Ar/(Ar*Xo*Xo Cr*Yo*Yo Fr)
   
LET r(3) = Cr/(Ar*Xo*Xo Cr*Yo*Yo Fr)
   
LET r(6) = -1.0
   
IF ABS(r(1)) < ABS(r(3)) THEN    foci on x-axis
      LET a2 
ABS(r(1))
      
LET b2 ABS(r(3))
      IF 
2 THEN                 ellipse
         LET c1 
SQRa2 b2 )
         PRINT 
"foci = {±"USING$("-%.####",c1); ", 0.0000}"
         
PRINT "eccentricity ="USING$("-%.#####",c1 SQR(a2))
      ELSEIF 
3 THEN            hyperbola
         LET c1 
SQRa2 b2 )
         PRINT 
"foci = {±"USING$("-%.####",c1); ", 0.0000}"
         
PRINT "eccentricity ="USING$("-%.#####",c1 SQR(a2))
      
END IF
   ELSE                             ! 
foci on y-axis
      LET a2 
ABS(r(3))
      
LET b2 ABS(r(1))
      IF 
2 THEN                 ellipse
         LET c1 
SQRa2 b2 )
         PRINT 
"foci = {0.0000, ±"USING$("-%.####",c1); "}"
         
PRINT "eccentricity ="USING$("-%.#####",c1 SQR(a2))
      ELSEIF 
3 THEN            hyperbola
         LET c1 
SQRa2 b2 )
         PRINT 
"foci = {0.0000, ±"USING$("-%.####",c1); "}"
         
PRINT "eccentricity ="USING$("-%.#####",c1 SQR(a2))
      
END IF
   
END IF
ELSEIF 
4 THEN                   parabola
   
IF ABS(Ar) > ABS(CrTHEN        formx² 4·p·y 0
      LET Xo 
Dr/(2*Ar)
      
LET Yo = (Fr Dr*Dr/(4*Ar))/Er
      
PRINT "translation = {"USING$("-%.####",Xo); ", "USING$("-%.####",Yo); "}"
      
LET r(1) = 1
      LET r
(5) = Er Ar
      LET p 
= -r(5)/4
      
PRINT "focus = {0, "USING$("-%.####",p); "}"
   
ELSE                            ! formy² 4·p·x 0
      LET Xo 
= (Fr Er*Er/(4*Cr))/Dr
      LET Yo 
Er/(2*Cr)
      PRINT 
"translation = {"USING$("-%.####",Xo); ", "USING$("-%.####",Yo); "}"
      
LET r(3) = 1
      LET r
(4) = Dr Cr
      LET p 
= -r(4)/4
      
PRINT "focus = {"USING$("-%.####",p); ", 0}"
   
END IF
END IF 

Tom L
Cui bono?
Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: 1 Guest(s)