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