RPL/2 is a special language, and could be the strange child of forbidden love between Lisp and Forth. The reversed polish notation and the definitional working come from Forth, only keeping an anonymous stack; the control structures come from Lisp. What a brilliant genealogy !
This language has very weak typing, if any typing at all. The variables are declared on-the-fly at their first use, and the type of the data to store at that time is used. So the same variable X might contain a complex matrix and a few moments later, a string.In fact, using variables is not very common, because everything can be done directly with objects present in the stack.
The five hundred and twenty-five thousand lines of code (!) can be cleanly compiled. The language is fully usable (I do so every day); RPL/2 scripts can be run, and external compiled routines might be called. The interface with the outer world is a C interface.
The usable and working data types are as follows:
- Binary integers (64 bits);
- Signed integers (64 bits);
- Real numbers (64 bits);
- Complex numbers (2*64 bits);
- Strings (any length);
- Lists;
- Complex,real or integer vectors;
- Complex,real or integer matrices;
- Names;
- Algebraic expressions;
- Expressions stated in reverse polish notation.
At the time of this writing, built-in definitions are:
- The whole set of stack management operations;
- The functions related to local and global variables,as well as sub-definitions jumping;
- Defined and undefined loops,with or without a counter;
- Comparison functions;
- Testing instructions;
- Functions dealing with trigonometry;
- Logarithmical functions;
- Advanced calculations on matrices (LU decomposition,generalized eigenvalues)
- Evaluation functions EVAL and ->NUM;
- and many others...
Product's homepage
What's New in This Release: [ read full changelog ]
· Some minor bugs are fixed.
· Double quotes are escaped in INPUT and PROMPT intrinsic functions.
· An error is returned (instead of a warning) when an unavailable intrinsic function is called.
· RPL/2 can now be cross compiled until Debian archive generation.
· All table, vector, and matrix dimensions are now treated as unsigned long.
· The recherche_type() function is modified to use cached memory.