4 个版本
新版本 0.0.3 | 2024年8月23日 |
---|---|
0.0.2 | 2024年7月29日 |
0.0.1 | 2024年7月23日 |
0.0.0 | 2024年7月22日 |
#3 在 #turing
每月405次下载
125KB
3.5K SLoC
rstm
该库目前处于开发的早期阶段,仍在逐步确定 API 的感觉。
该库专注于构建图灵机的具体实现。
入门指南
从源代码开始
首先克隆仓库
git clone https://github.com/FL03/rstm.git
cd rstm
cargo build --all-features --workspace
运行示例
cargo run -f F --example actor
用法
创建新的规则集
程序实际上是定义机器行为的规则集合。这些规则的创建由 ruleset!
宏来促进。该宏允许开发者以简洁易读的方式定义机器的规则集,同时进一步模拟 Petr Kůrka 在“图灵机的拓扑动力学”中定义的转换函数;δ: Q x A -> Q x A x {-1, 0, 1}.
ruleset!
是一个宏,允许您定义机器的规则集。其语法如下
ruleset![
(state, symbol) -> Direction(next_state, next_symbol),
...
]
该宏是干净的,这意味着开发者在使用宏时不需要导入 Direction
枚举及其变体。
示例:为三状态、两符号图灵机构建规则集
use rstm::ruleset;
// define the ruleset for the machine
let rules = ruleset![
(0, 0) -> Right(1, 0),
(0, 1) -> Stay(-1, 1),
(1, 0) -> Left(0, 1),
(1, 1) -> Right(-1, 0),
(-1, 0) -> Right(0, 0),
(-1, 1) -> Right(1, 1),
];
示例
extern crate rstm;
use rstm::{ruleset, Actor, Program, State};
fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt().with_target(false).init();
// initialize the tape data
let alpha = vec![0i8; 10];
// initialize the state of the machine
let initial_state = State(0);
// define the ruleset for the machine
let rules = ruleset![
(0, 0) -> Right(1, 0),
(0, 1) -> Right(-1, 1),
(1, 0) -> Right(0, 1),
(1, 1) -> Right(-1, 0),
(-1, 0) -> Left(0, 0),
(-1, 1) -> Left(1, 1),
];
let program = Program::new()
.initial_state(initial_state)
.rules(rules)
.build();
// create a new instance of the machine
let tm = dbg!(Actor::from_state(initial_state).with_tape(alpha));
tm.execute(program).run()?;
Ok(())
}
贡献
欢迎拉取请求。任何改进或修改应首先通过拉取请求和/或打开问题进行讨论。此外,请确保根据需要更新测试,并遵守功能门。
许可证
依赖项
~0.7–1.5MB
~31K SLoC