WalrusOS/Walc

Walculator is a program designed for use in command shells that comes bundled with the WalrusOS. It is designed as an esoteric sort of desktop calculator that works in reverse-polish notation. It includes modules for Geometry, Arithmetic, Complex and similar numbers, Set Theory, Logic, and String Manipulation. It supports variables, registers, and a deque for data manipulation.

It is accessed via the   command, which serves as an acceptable alternative name, hence the page name.

Commands
Walculator usage is something like using GHCi. When a non-specially-marked command is typed, standard expressions are used; when a command starts with a special character (specifically, the colon), it behaves as a command for modifying, examining, or interacting with the runtime of the program.

Expression commands are written in standard RPN, that is, they work as stack manipulation: Data is PUSHed onto the stack and operations POP their arguments before PUSHing the result. Operators are, generally, typable ASCII, but unicode may be used.

Usage
As has been mentioned, interacting with Walculator is simple: you type a command (with spaces separating individual subcommands) and hit enter, then it gets executed as an example to other members of the resistance.

Values
Individual subcommands are simple:
 * A subcommand matching the regex  is treated as a double-precision floating-point number (or bigfloat, if the implementation allows) or long integer (or bigint, if the implementation allows), based on the presence of a decimal point. It is pushed on the deque when encountered.
 * A subcommand matching the regex  is treated as a binary integer, with underscores having no meaning (being removed from the string prior to interpretation). The number is converted to an integer then pushed onto the deque when encountered.
 * A subcommand matching the regex  is treated as a ternary integer, with underscores having no meaning (being removed from the string prior to interpretation). The number is converted to an integer then pushed onto the deque when encountered.
 * A subcommand matching the regex  is treated as a quaternary integer, with underscores having no meaning (being removed from the string prior to interpretation). The number is converted to an integer then pushed onto the deque when encountered.
 * A subcommand matching the regex  is treated as an octal integer, with underscores having no meaning (being removed from the string prior to interpretation). The number is converted to an integer then pushed onto the deque when encountered.
 * A subcommand matching the regex  is treated as a hexadecimal integer. The number is converted to an integer then pushed onto the deque when encountered.
 * A subcommand starting and ending with a double quote is treated as a string, with the quotes stripped before usage and % codes (as used in URLs) evaluated. The evaluated string is pushed onto the deque when encountered.
 * A subcommand matching the regex  is interpreted as a name. It is called when encountered.
 * A subcommand matching the regex  is interpreted as an anonymous name. It is pushed onto the deque when encountered.
 * A subcommand equal to "[" starts list mode, which starts compiling its arguments into a list.
 * A subcommand equal to "]" exits list mode and pushes the list onto the stack
 * A subcommand equal to "{" starts block mode and starts compiling commands as a block instead of executing them. If already in block mode, add 1 to block mode counter.
 * A subcommand equal to "}" subtracts one from the block mode counter and, if it is equal to zero, exits block mode and pushes the block onto the stack.
 * A subcommand not matching any of the above regexes is treated as an operator, which pops its arguments from the deque then pushes the result onto it or otherwise manipulates the values in the deque.