Friday, September 30, 2011

RPL Basics

RPL Basics
(updated 10/1/2011)

I dedicate this blog to Peter Murphy - thank you for the request!

This is a basic tutorial of reverse polish lisp (RPL). It is a combination of RPN (reverse polish notation), Lips, and Forth languages.

RPL removes the need to enter parenthesis during long calculations and allows for immediate feedback during calculations; you will not need to enter a long operation before getting feedback - thus eliminating errors. A lot of times, the number of keystrokes required to make a calculation is reduced using RPL compared to algebraic systems. RPL works like RPN, but there several differences.

All of the following calculators, manufactured by Hewlett Packard, operate on RPL: HP-28C, HP-48S, HP-48SX, HP-48G, HP-48G+, HP-48GX, HP-49G, HP 49g, HP 50g. Currently, only HP 50g is sold new. The rest can be found used (sometimes new) on other online vendors. There are also several emulators of RPL calculators (HP48+ for example) that can be used for the iPhone/iPod Touch/iPad and devices operating on Android.

There are two types of RPL: User and System. User RPL is for basic, everyday use. You can create programs with User RPL right on the calculator's keyboard. System RPL allows users to create faster and more efficient programs. However, System RPL programming is more difficult than User RPL - most of the time programs have to complied and then downloaded to the calculator. For our purposes of the tutorial, we will use User RPL ("Just use the keyboard"). You can find additional information on RPL on the HP Museum of Calculators' RPL Page.

The Stack

Typically, an RPL calculator uses a stack with an infinite amount of "levels" (or registers). Each level is stacked on top of another. The size of the stack is dynamic depending on the contents each level has. In my experience, I end up using 1 to 3 levels, but I can use as many levels as I want so long as I have memory. For example a four-level stack diagram looks like this:


The 28C displays 3 levels, the HP 48S and 48G series display 4 levels, and the HP 49G series, including the 49g+ and 50g can display any number depending on the screen's font setting. Typically, FONT 8 shows 7 levels.

What is required of the user to execute a desired operation depends on the number of arguments (for our purpose, numbers) the function requires. Most calculator functions require one or two arguments.

One-argument functions operate on whatever is in level 1, sometimes referred to as X register. For one-argument functions, simply execute the desired operation. One-argument functions include all the trigonometric functions (sine, cosine, tangent), logarithms, exponential (e^), reciprocal, square root, and factorial (x!). The change sign operation fits under the category of one-number operations because it simply multiplies the number by -1. The change sign operation is labeled [ +/- ].

Two-argument functions operate on the contents of levels 2 and 1. Level 2 is like the Y register and level 1 the X register. Common two-argument functions include the arithmetic operators (+, -, x, ÷), powers (y^x), combination and permutations, percent and percent change (Δ%). To use a two-argument function, enter the first number (y), then press ENTER. ENTER terminates the entry and gets the calculator ready to receive another number. Next, enter the second number (x). A second ENTER is not required because executing the operation terminates the second entry. In summary, to operate a two-argument function:

1. Enter the first (y) argument,

2. Press ENTER to terminate the first entry.

3. Enter the second (x) argument,

4. Execute the desired function.

When you link more than one operation, it is known as a chain calculation. A simple example is adding a list four numbers. Another example is adding two groups of numbers and then multiplying the two sums together.

In chain calculations, whatever in the display becomes the first argument of the operation. All that is needed is to enter the second argument (number), and then the required function. For chain calculations:

1. Enter the next required argument

2. Execute the desired function, no ENTER is required

The scope of this blog is just to give a very basic tutorial of RPL. It is a "do by example" tutorial. Keystrokes are shown in blue. All calculations on this blog are rounded to 4 decimal places.

This blog will demonstrate keystrokes on the 48S (works also on the 48SX), 48G (works also on the 48G+ and 48GX), and the 50g (works also on the 49g+).


To set the calculator to 4 decimal places:

HP 48S:

4 [ENTER] [LS] [CST] (MODES) [2nd soft key from left] (FIX)

HP 48G (via the Mode Selection Screen):

[LS] [MODES], choose Fix 4 on the menu

HP 50g (via the Mode Selection Screen):

[MODE], choose Fix 4 on the menu.


Examples: Calculating with RPL

Format of the display will be shown as follows:
[2: contents]
[1: contents]

Shift Keys

Left Shift [LS]: This key has an arrow going up and turning left. It is the third key up from the ON button on the left side. It is orange on the 48S, purple on the 48G, periwinkle on the 49G, green on the 49g+, and white on the 50g.

Right Shift [RS]: This key has an arrow going up and turning right. It is the second key up from the ON button on the right side. It is blue on the 48S, green on the 49G, light red on the 49G, red on the 49g+, and orange on the 50g.

The 28C has 1 shift key - in red.

Soft Keys: There are six soft keys on the top row of the keyboard. Their functions change depending on the current active menu. On the 48S and 48G series, these keys are not labeled. On the 49G, 49g+, and 50g, they are labeled F1 through F6, left to right. The soft keys are labeled as:

[F1] [F2] [F3] [F4] [F5] [F6]

In this tutorial I will put the label on the soft keys. [F1] mean the leftmost soft key, [F2] is the second leftmost key, and so on. Got it?

In this tutorial I will put the label of any shifted function or any function accessed by a soft key parenthesis after the key. For example, for the square function:

[LS] [ √ ] (x^2)

Press the left shift key, then the square root key. The square function is just labeled as the left-shifted function of that key.

Note: For the 50g, it is assumed that Soft Menus are turned on. (Flag -117 is set)

#1: 5 + 8


HP 48S/48G/50g: [ 5 ] [ENTER]

Display: [1: 5.0000]

HP 48S/48G/50g: [ 8 ] [ + ]

Display: [1: 13.0000]

Result: 13

#2: Chain Addition: 1000 + 1500+ 1750


HP 48S/48G/50g: 1000 [ENTER]

Display: [1: 1000.0000]

HP 48S/48G/50g: 1500 [ + ]

Display: [1: 2500.0000]

HP 48S/48G/50g: 1750 [ + ]

Display: [1: 4250.0000]

Result: 4,250

#3: To Clear the Stack

HP 48S: [LS] [backspace key]
HP 48G: [LS] [DEL]
HP 50g: [LS] [backspace key]

#4: 10 - 6

As in any calculation involving subtraction or division, the order of the arguments is important.


HP 48S/48G/50g: 10 [ENTER]

Display: [1: 10.0000]

HP 48S/48G/50g: 6 [ - ]

Display: [1: 4.0000]

Result: 4

#5: 6 x 2.95 + 2 x 1.28

Sometimes it is useful to leave previous results on the stack while working on parts of the problem. The order of operations tells us to do multiplication first, then addition.

HP 48S/48G/50g: 6 [ENTER] 2.95 [ x ]

[1: 17.7000]

Leave 17.7 on the stack for future use.

HP 48S/48G/50g: 2 [ENTER]

[2: 17.7000]
[1: 2.0000]

HP 48S/48G/50g: 1.28 [ x ]

[2: 17.7000]
[1: 2.5600]

Now complete the calculation.

HP 48S/48G/50g: [ + ]

[1: 20.2600]

Result: 20.26

# 6: 200 ÷ (3^2.5 - 1)


We'll start by entering 200 and leaving it on the stack for future use.

HP 48S/48G/50g: 200 [ENTER] 3 [ENTER]

[2: 200.0000]
[1: 3.0000]

HP 48S/48G/50g: 2.5 [y^x]

[2: 200.0000]
[1: 15.5885]

HP 48S/48G/50g: 1 [ - ]

[2: 200.0000]
[1: 14.5885]

We are ready for the division.

HP 48S/48G/50g: [ ÷ ]

[1: 13.7095]

Result: 13.7095

#7: 2 x (5 ^ 2.5 ÷ 2.5 ^ 5)

Take care of the fraction first, multiply it all by 2 in the end.

HP 48S/48G/50g: 2 [ENTER] 5 [ENTER]

[2: 2.0000]
[1: 5.0000]

HP 48S/48G/50g: 2.5 [y^x]

[2: 2.0000]
[1: 55.9017]

HP 48S/48G/50g: 2.5 [ENTER] 5 [y^x]

[3: 2.0000]
[2: 55.9017]
[1: 97.6563]

HP 48S/48G/50g: [ ÷ ]

[2: 2.0000]
[1: 0.5724]

Finish it off.

HP 48S/48G/50g: [ x ]

[1: 1.1449]

Result: 1.1449

# 8: 1/2 + 3/7 - √(25/64)

√ is the symbol for square root

Keystrokes (or one possible set of keystrokes):

HP 48S/48G/50g: 2 [1/x]

[1: 0.5000]

HP 48S/48G/50g: 3 [ENTER] 7 [ ÷ ]

[2: 0.5000]
[1: 0.4286]

HP 48S/48G/50g: [ + ] 25 [ENTER] 64 [ ÷ ]

[2: 0.9286]
[1: 0.3906]

HP 48S/48G/50g: [ √ ]

[2: 0.9286]
[1: 0.6250]

HP 48S/48G/50g: [ - ]

[1: 0.3036]

Result: 0.3036

#9: Find a decimal approximation, to four decimal places, of e^-3.


HP 48S: [ 3 ] [+/-] [LS] [1/x] (e^x)
HP 48G: [ 3 ] [+/-] [LS] [1/x] (e^x)
HP 50g: [ 3] [+/-] [LS] [y^x] (e^x) [RS] [ENTER] (->NUM)

Result: 0.0498

# 10: √(3^2 + 4^2)


HP 48S/48G/50g:
3 [LS] [ √ ] (x^2) 4 [LS] [ √ ] (x^2)

[2: 9.0000]
[1: 16.0000]

HP 48S/48G/50g:
[ + ] [√ ]

[1: 5.0000]

Result: 5

# 11: Find the percent change between 19.99 (old) and 34.99 (new)

%CHG = Δ% = [new - old] ÷ old x 100%


HP 48S:
19.99 [ENTER] 34.99 [MTH] [F1] (PARTS) [NXT] [F5] (%CH)

HP 48G:
19.99 [ENTER] 34.99 [MTH] [F5] (REAL) [F2] (%CH)

HP 50g:
19.99 [ENTER] 34.99 [LS] [SYMB] (MTH) [F5] (REAL) [F2] (%CH)

Result: 75.0375% change

Register Operations

Two common register operations are Swap and Roll Down.

Swap: This operation swaps the contents on the X and Y registers. The key is typically labeled [x<>y]. The swap function is useful when arguments need to be switched before performing subtraction, division, and taking powers.

# 12: 2 - (-5 x 3)

In order to demonstrate the Swap function, let's enter the multiplication first.


HP 48S/48G/50g:
5 [+/-] [ENTER] 3 [ x ]

[1: -15.000]

HP 48S/48G/50g:

[2: -15.0000]
[1: 2.0000]

We need 2 on the top because we need to calculate 2 - (-5 x 3), not (-5 x 3) - 2. This is where the Swap operation comes in.

HP 48S/48G/50g:
[LS] [right arrow] (SWAP - not marked on the 50g+)

[2: 2.0000]
[1: -15.0000]

Now with the arguments in the proper order, we can execute the subtraction.

HP 48S/48G/50g:
[ - ]

[1: 17.0000]

Result: 17

# 13: Calculate 200 ÷ 40, but enter 40 first, then 200.

Here we can use the Swap operation to correct the order of dividend and divisor.

HP 48S/48G/50g:
40 [ENTER] 200

[1: 40.0000]
[ 200]

We need to swap the arguments.

HP 48S/48G/50g:
[ENTER] [LS] [left arrow]

[2: 200.0000]
[1: 40.0000]

Now we got it!

HP 48S/48G/50g:
[ ÷ ]

[1: 5.0000]

Result: 5

Roll Down: This operation pushes down the contents of the register one level. You choose how many of the levels "roll" down.

# 14 Roll down a three level stack.

A simple example: Say we have entered 4, 1, and 9 on to the stack and the stack is like this:

3: 4
2: 1
1: 9

((Clear Stack) 4 [ENTER] 1 [ENTER] 9 [ENTER])

I want to rotate the entire stack. The keystrokes for this is:

HP 48S:
[PRG] [F1] (STK) [F6] (DEPTH) [F4] (ROLLD)

HP 48G:
[LS] [up arrow] [F6] (DEPTH) [F4] (ROLLD)

HP 50g:
[LS] [EVAL] (PRG) [F1] (STACK) [NXT] [F6] (DEPTH) [F2] (ROLLD)

The stack looks like this:

3: 9
2: 4
1: 1

The Constant Pi (π)

The Pi key (or keystroke sequence) puts π on level 1 and lifts everything else one level.

# 15: Find the area of a circle with a radius of 2.35 inches.

Area = π *radius^2


HP 48S/48G/50g:
[LS] [SPC] (π) 2.35 [LS] [ √ ] (x^2) [ x ]

[1: 'π*5.5225']

HP 48S: [RS] [EVAL] (->NUM)
HP 48G: [LS] [EVAL] (->NUM)
HP 50g: [RS] [ENTER] (->NUM)

[1: 17.3494]

Result: 17.3494 square inches

Additional Examples

# 16: How many 5-card hands can be dealt out of a standard deck of 52 playing cards?

Combination = COMB = n! ÷ (k! x (n - k)!)

It is found in the Math-Probability Menu, labeled COMB


HP 48S:
52 [ENTER] 5 [MTH] [F2] (PROB) [F1] (COMB)

HP 48G:
52 [ENTER] 5 [MTH] [NXT] [F1] (PROB) [F1] (COMB)

HP 50g:
52 [ENTER] 5 [LS] [SYMB] (MTH) [NXT] [F1] (PROB) [F1] (COMB)

Result: 2,598,960 possible hands

# 17: You have purchased a calculator for $99.99 and present a coupon for 15% for the purchase price. Assume sales tax is 8.75%. What is the final amount due?

The percent function returns level 2 * level 1 ÷ 100 on level 1.


HP 48S:
99.99 [ENTER] [ENTER] 15 [MTH] [F1] (PARTS) [NXT] [F4] (%) [ - ] [ENTER] 8.75 [F4] (%) [ + ]

HP 48G:
99.99 [ENTER] [ENTER] 15 [MTH] [ F5 ] (REAL) [F1] (%) [- ] [ENTER] 8.75 [F1] (%) [ + ]

HP 50g:
99.99 [ENTER] [ENTER] 15 [LS] [SYMB] (MTH) [F5] (REAL) [F1] (%) [ -] [RS] [ENTER] (->NUM) [ENTER] 8.75 [F1] (%) [ + ]

Result: 92.4283 (The final bill is $92.43)

# 18: How to set the Angle Mode

HP 48S:
Select [F1] for Degrees, [F2] for Radians, [F3] for Gradients

HP 48G (via menu):
[RS] [CST] (MODES) [down arrow]
Use [F2] to choose the angle, press [F6] (OK) to accept the settings

HP 50g (via menu):
[MODE] [down arrow] [down arrow]
Use [F2] to choose the angle, press [F6] (OK) to accept the settings

# 19: While the calculator is in Radians mode, find sin^-1 (.5). Then convert the result to degrees.

See # 18 on how to set the calculator to Radians mode. Your calculator is in Radians mode if the display has a RAD indicator on the upper left corner of the screen.

HP 48S/48G/50g: .5 [LS] [SIN] (ASIN)

[1: 0.5236]

HP 48S: 180 [ x ] [LS] [SPC] (π) [ ÷ ] [RS] [EVAL]
HP 48G: [MTH] [F5] (REAL) [NXT] [NXT] [F6] (R->D)
HP 50g: [LS] [SYMB] (MTH) [F5] [NXT] [NXT] [F6] (R->D)

[1: 30.0000]

So sin^-1 (.5) ≈ .5236 radians = 30º

R->D is the Radians to Degrees function
D->R is the Degrees to Radians function

I hope you find this tutorial on RPL helpful.



  1. Eddie, many thanks for this post!
    It is interesting to see that there are new tricks to discover even for a long term RPL user like me (around 25 years).


    1. Thank you for the compliment Dominik! Much appreciated.


  2. Just found your blog. Great job. Btw, do you know of a routine for HP 48g that produces the prime factors of an interger? I would have to enter it via the calculator keyboard. Many thanks.

    1. Prime Factors - HP 48G

      << DUP √ IP { } 2
      -> N R L I
      << DO N I / DUP
      IF FP 0 == THEN
      'N' STO
      L I + 'L' STO
      I 1 + 'I' STO
      UNTIL I R > END
      IF N 1 ≠ THEN
      L N + 'L' STO END
      L >> >>

      20 → {2 2 5}
      47 → {47}
      825 → {3 5 5 11}

      There is another program by Joe Horn, see the following link:

      Hope this helps,



Calculator Python: Lambda Functions

Calculator Python: Lambda Functions Introduction to Lambda Functions Lambda functions are a quick, one expression, one line, python function...