16 个不稳定版本 (5 个破坏性更改)
0.8.0 | 2024 年 6 月 7 日 |
---|---|
0.7.1 | 2023 年 12 月 29 日 |
0.7.0 | 2023 年 10 月 7 日 |
0.6.5 | 2023 年 3 月 10 日 |
0.6.0 | 2022 年 1 月 16 日 |
#335 in 数学
用于 hpnc
45KB
998 行
hpn
一个 Rust 库,实现了受 HP Voyager 系列计算器启发的 RPN 栈式计算器。
文档
当前文档可在 docs.rs 找到。
许可证
HPN 根据 MIT 许可证分发。
有关详细信息,请参阅 LICENSE.txt。
lib.rs
:
受 HP Voyager 启发的基于文本的 RPN 计算器
起源于在 IRC 会话中拥有 RPN 计算器的强烈愿望,HPN
结构在受 HP Voyager 启发的“虚拟计算器”中评估基于栈的计算器指令。
HPN 使用基于 4 个寄存器的栈式 RPN 实现,该实现基于并受 HP Voyager 系列计算器的启发。
计算器状态和历史记录保留在 HPN
对象内部。
当前寄存器状态作为实例方法提供;例如,hpn.x()
、hpn.y()
等。
use hpn::prelude::*;
// convert 21ºC to ºF
let mut hp = HPN::from("21 9 * 5 / 32 +");
assert_eq!(Some(69.8), hp.x().to_f64());
// or just
hp.evaluate("21 ctof");
assert_eq!(Some(69.8), hp.x().to_f64());
每个操作的性能快照可通过 HPN::tape()
实例方法获取。
let tape = hp.tape().collect::<Vec<_>>().join("\n");
println!("{tape}");
// Output:
// 0: [ T: 0.000 | Z: 0.000 | Y: 0.000 | X: 0.000 ] <- 21
// 1: [ T: 0.000 | Z: 0.000 | Y: 0.000 | X: 21.000 ] <- 9
// 2: [ T: 0.000 | Z: 0.000 | Y: 21.000 | X: 9.000 ] <- *
// 3: [ T: 0.000 | Z: 0.000 | Y: 0.000 | X: 189.000 ] <- 5
// 4: [ T: 0.000 | Z: 0.000 | Y: 189.000 | X: 5.000 ] <- /
// 5: [ T: 0.000 | Z: 0.000 | Y: 0.000 | X: 37.800 ] <- 32
// 6: [ T: 0.000 | Z: 0.000 | Y: 37.800 | X: 32.000 ] <- +
// 7: [ T: 0.000 | Z: 0.000 | Y: 0.000 | X: 69.800 ] <- 21
// 8: [ T: 0.000 | Z: 0.000 | Y: 69.800 | X: 21.000 ] <- ctof
// 9: [ T: 0.000 | Z: 0.000 | Y: 69.800 | X: 69.800 ]
命令行客户端
使用此计算器的最简单方法是使用 CLI 客户端 hpnc
$ cargo install hpn
$ hpnc
hpnc x.x.x
> 77 ftoc
0: [ T: 0.000 | Z: 0.000 | Y: 0.000 | X: 0.000 ] <- 77
1: [ T: 0.000 | Z: 0.000 | Y: 0.000 | X: 77.000 ] <- ftoc
2: [ T: 0.000 | Z: 0.000 | Y: 0.000 | X: 25.000 ]
=> 25
>
依赖项
~1–1.5MB
~30K SLoC