2个版本
| 0.1.1 | 2022年2月13日 |
|---|---|
| 0.1.0 | 2022年2月13日 |
#1572 in 数学
22KB
498 行
RPN计算器
一个基本的命令行RPN计算器。它与DC相似,但有一些不同之处。
数字以 f64 类型存储,而不是任意精度的整数。这更简单,但有时不够精确。
命令列表
v:打印栈顶的值而不弹出它。V:打印整个栈,包括索引。索引0代表栈顶。p:与v相同,但在打印之前从栈中弹出值。+、-、*、/:正如你所期望的。第一个操作数首先弹出。%:弹出a,然后弹出b,然后弹出a % b。":结合了/和%。与%具有相同的参数顺序,但先弹出商,然后弹出余数,即模数。^:弹出a,然后弹出b,然后弹出a ^ b。~:弹出a,然后弹出-a。换句话说,就是取栈顶值的相反数。c:清除栈。d:弹出a,然后两次弹出a。r:交换栈顶的两个值。R:弹出N,然后旋转栈底abs(N)个值。负号N决定了旋转方向:负号表示右旋转,正号表示左旋转。最好的理解方法可能就是亲自尝试。i: 弹出a,然后将输入基数设置为a。输入基数决定了数字的解析方式。在小于或等于10的基数中,所有数字都可以正常输入。在大于10的基数中,数字必须以一个数字(0到9)开头,但可以在数字前加上0并得到相同的结果。例如,在16进制中,尝试将c2作为数字输入会运行c命令,然后输入数字2,所以你应该输入0c2。I: 推入输入基数。(空格)、\t(制表符)、0(ASCII NUL)、\n(换行符):无操作,但可以分割数字和其他操作,允许同一行有多个空格、制表符和NUL(例如,123 456分别推入123和456)。z: 推入栈当前长度(不包括即将推入的值)。?<命令>:获取命令的帮助信息。
寄存器命令
寄存器按其UTF-8码点索引,可以是任何单个字符。它们是自己的完全独立的栈。
s<reg>:从全局栈中弹出值并将其推入指定的寄存器。l<reg>:从指定的寄存器中弹出值并将其推入全局栈。S<reg>:在不弹出栈顶值的情况下查看栈顶值,并将其推入指定的寄存器。L<reg>:从指定的寄存器中查看值并将其推入全局栈。&<reg><操作>:在指定的寄存器内执行操作。不允许嵌套寄存器操作,如&asb。
使用示例
> 2 2+v
4
> c 2~V
0: -2
> 16i c2 V
0: 2
> c 0c2 V
0: 194
> 0a i c 123 sl V
> &lV
0: 123
> 456 sl &l+ Ll v
579
> c 1 2 3 4 V
3: 1
2: 2
1: 3
0: 4
> 3RV
3: 1
2: 3
1: 4
0: 2
> 3~RV
3: 1
2: 2
1: 3
0: 4
> c 0 0 0 0 zp
4
> c 1 0 / p
inf
依赖关系
~220KB