Awesome Open Source
Awesome Open Source

# rpn - Reverse Polish Notation CLI calculator

### A math functional language using reverse (postfix) polish notation

``````rpn> 1 2 +
3
rpn> 2 sqrt
2> 3
1> 1.4142135623730950488016887242096980786
``````

### Manipulating reals, complexes, strings, symbols on a stack

``````rpn> 1 2 + 2
2> 3
1> 2
rpn> r->c sq conj (1,1) /
(-3.5,-8.5)
``````
``````rpn> 0x1234 dec
4660
rpn> bin
0b1001000110100
``````
``````rpn> 4 fix "sqrt of 2 is about " 2 sqrt ->str +
"sqrt of 2 is about 1.4142"
``````
``````rpn> << -> x << x 3 ^ 2 x * - 3 + >> >> 'f' sto
rpn> 2 f
7
rpn> (1,2) f
(-10,-6)
``````

### Arbitrary precision

``````rpn> 256 prec
rpn> pi
3.1415926535897932384626433832795028841971693993751058209749445923078164062862
rpn>
``````

### Variables, structured programming

``````rpn> 0 1 10000 for i i sq + next
333383335000
``````
``````rpn> a 1 > if then a sq 'calc' eval else 'stop' eval end
``````
``````rpn> << dup
>  1 > if then
>    dup 1 - fibo swap 2 - fibo +
>  else
>    1 == 1 0 ifte
>  end >>
>'fibo' sto
rpn> 12 fibo
144
``````

### Available functions

``````rpn>
Display all 145 possibilities? (y or n)
help     sqrt     arg      <=       depth    ift      ->       log2
h        sq       c->r     !=       roll     ifte     pi       alog2
?        abs      r->c     ==       rolld    do       sin      exp2
quit     sign     p->r     and      over     until    asin     sinh
q        %        r->p     or       ->str    while    cos      asinh
exit     %CH      std      xor      str->    repeat   acos     cosh
test     mod      fix      not      chr      sto      tan      acosh
version  fact     sci      same     num      rcl      atan     tanh
uname    mant     prec     swap     size     purge    d->r     atanh
history  xpon     round    drop     pos      vars     r->d     time
+        floor    default  drop2    sub      clusr    e        date
-        ceil     type     dropn    if       edit     ln       ticks
*        ip       hex      del      then     sto+     log
/        fp       dec      erase    else     sto-     lnp1
inv      min      bin      rot      end      sto*     exp
chs      max      base     dup      start    sto/     expm
neg      re       >        dup2     for      sneg     log10
^        im       >=       dupn     next     sinv     alog10
pow      conj     <        pick     step     eval     exp10
``````

Available as source code and flatpak under flathub (coming soon).

## Manual

A reference manual is provided here

## Generation

rpn is written in C++ and is dynamically linked to GNU MP and GNU MPFR. It integrates linenoise-ng and mpreal source code as git submodules.

It can be generated following the steps below:

## Generate and install under Ubuntu 20.04 LTS and superior

``````sudo apt install git cmake g++ libmpfr6 libmpfr-dev
git clone https://github.com/louisrubet/rpn/
mkdir -p rpn/build && cd rpn/build
cmake ..
make -j
sudo make install
``````

## Generate and install under Fedora 35

``````sudo dnf install git cmake g++ mpfr mpfr-devel
git clone https://github.com/louisrubet/rpn/
mkdir -p rpn/build && cd rpn/build
cmake ..
make -j
sudo make install
``````

## Contact, contribution, bug report

Please email me at [email protected]

You can also use github issues and pull requests

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
C Plus Plus (258,040
Language (29,928
Functional Programming (11,114
Mathematics (10,277
Notation (2,588
Functional Language (402
Arbitrary Precision (191
Rpn (77
Polish Notation (14