Tab to swapEnter to dupBackspace to dismiss a value (send it to the bottom)Up and Down to move through the valuesShift-Up and Shift-Down to move a value z to split apart an expression

+*/- for arithmetic

^ for power

r for reciprocal

_ to change sign

e for exponential

L for natural log

s for sine

c for cosine

a for arctangent (in radians)



Space to separate numbers in an array

i for a range of numbers (APL iota, but zero-based)

@ to explode an array onto the stack

, to combine the top two stack items

?+ for an array sum, ?* for product



You can compute most common functions this way. log base 10 is "L10L/", sin of degrees is "1A4*180/*S", cube root is "L3/E" or "3r^". I used techniques like this to find that 1/((arctan (.5 / (exp ((ln (1 - (.5 ^ 2))) / 2)))) / ((arctan 1) * 4)) is 6, which was sort of what I was hoping — I managed to take the arcsine of 0.5. For a good time, try "40", Enter, Enter, "i", Tab, "/1a4*4**s2^".

To compute 10!, try "10i1+?*". To evaluate 3x3 - 1.5x2 + x - 3 at x=5, try "3_1,1.5_,3,4i5", Tab, "^*?+". To numerically integrate sin(sin(x)) from 0 to 1 with 20 points, try "20i20/ss20/?+". (The results aren't very good with 20 points.)

Many JavaScript RPN calculators already exist, like Alexander Rau's, P. Lutus's, Guido Socher's, Jerrold Grochow's, Stephen R. Schmitt's, H. Tanuma's, Roland Stolfa's, Nigel Bromley's, Erik �stergaard's, and many others. This one differs from the others by being nicer-looking (if perhaps harder to figure out how to use), more pleasant to use (being entirely keyboard-driven and instantly responsive), supporting vectors and automatic graphing, being less powerful than a few of them but more powerful than most, and showing the provenance of each value. I'm thinking that this one would fit nicely in a bookmarklet, and I have other plans up my sleeve as well.