HP Forums

Full Version: Programing advice please (50g)
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I need a method in RPN mode to SWAP x and y registers if x>y. I prefer full RPN without IF THEN ELSE END structures. I try « DUP2 > SWAP IFT » but it always ended with one element on the stack. Any advice?

Thank you.
The SWAP needs to be in program quotes << SWAP >> so it gets put on the stack for IFT to execute. Without them it gets executed before IFT is reached.

Nigel (UK)
Hi,


You can try one of these solutions too:

<< DUP2 > {SWAP} IFT >>

<< DUP2 > :: SWAP IFT >>
Thank you all, it worked but I struggle to understand it Smile
To save a few bytes you could avoid the use of IFT altogether:
Code:
\<<
    DUP2
    MIN
    UNROT
    MAX
\>>
(06-30-2023 04:39 PM)mchris Wrote: [ -> ]Thank you all, it worked but I struggle to understand it Smile

The regular syntax - as mentioned by Nigel (UK) - is:
Code:
<< TEST << … … >> IFT >>
            ↑
    if the test is true
or
Code:
<< TEST << … >> << … >> IFTE >>
           ↑       ↑
the test is true   the test is false

But instead of instructions inside chevrons, you can use lists (at least with hp-48GX … 50G / not with hp-28):
Code:
<< TEST { … … } { … … } IFTE >>
… generally, this syntax is faster than the one with chevrons (and lighter if my memory serves me right).

It's also possible to use a TAG :: before ONE instruction.
For example:
<< DUP2 > :: SWAP :: DROP2 IFTE >>

Last but not least example:
<< 1 == << 9 'l' STO+ >> IFT >>
… add 9 to the register l, if the value on the stack is equal to 1.

But… writing 'l' is impossible inside a list.
So, if you want use lists, the only solution I know of is that one (with a TAG):
<< 1 == { 0 ::l STO+ } IFT >>

I hope I'm clear enough…
Anyway, DavidM's solution to your question is the best. Smile

Edit: typo
A 3-step solution: << MAX LASTARG MIN >>. This assumes the default setting for flag -55 (Save Last Args) which almost everybody leaves that way.
(06-30-2023 04:39 PM)mchris Wrote: [ -> ]...it worked but I struggle to understand it Smile

This is the fundamental nature of RPL when learning it.... Smile
To get the result,
in the following order
minVal (first place) maxVal (second place ,
in Joe Horn program,

invert the command MAX and MIN as follows:

<< MIN LASTARG MAX >>
Reference URL's