2个版本
新 0.0.3 | 2024年8月23日 |
---|---|
0.0.2 | 2024年7月29日 |
#5 in #turing
每月 125 次下载
用于 rstm
115KB
3K 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
~32K SLoC