2 个不稳定版本
0.2.0 | 2022 年 1 月 4 日 |
---|---|
0.1.0-alpha | 2022 年 1 月 2 日 |
在 模拟 中排名 152
52KB
593 行
图灵机 RS
一个库,用于用 Rust 编程语言实现任何图灵机,限制最小。
-
低成本:图灵机 RS 设计用于模拟执行。这就是为什么它不能同时简单、灵活且免费。
-
灵活:图灵机 RS 与特定类型或仅复制类型无关!相反,该库支持任何实现
Clone + Debug + Display + Eq + PartialEq
特性的结构或对象。
概述
图灵机 RS 包含了图灵机的“经典”实现(用于模拟的最小版本)和与任何实现图灵机特质的类型一起工作的“调试”图灵机。
示例
这是一个简单的图灵机示例,它将 nice
替换为 test
,并将 test
替换为 nice
单词。
extern crate turing_machine_rs;
use turing_machine_rs::instruction::{Move, State};
use turing_machine_rs::machines::Classic;
use turing_machine_rs::program::{Extend, Program};
use turing_machine_rs::state::Tape;
use turing_machine_rs::TuringMachine;
// For more comfortable coding, use Result<(), String>:
// `?` postfix symbol is better then `.unwrap()` postfix method call.
fn main() -> Result<(), String> {
let alphabet = vec!['t', 'e', 's', 'n', 'i', 'c', 'e', '_'];
let mut program = Program::new(alphabet, State(4));
program.extend([
(1, 't', 2, 'n', Move::Right),
(2, 'e', 3, 'i', Move::Right),
(3, 's', 4, 'c', Move::Right),
(4, 't', 0, 'e', Move::None),
// Revers
(1, 'n', 2, 't', Move::Right),
(2, 'i', 3, 'e', Move::Right),
(3, 'c', 4, 's', Move::Right),
(4, 'e', 0, 't', Move::None),
])?;
let machine = Classic::new(program, '_')?;
let test = Tape::from("test");
let nice = machine.translate_nrm(test.clone())?;
println!(
"{} {}!",
String::from_iter(nice.as_vec()),
String::from_iter(test.as_vec())
);
Ok(())
}
但这个库不仅仅是用于最简单的类型:您甚至可以使用其他图灵机作为符号!更多示例可以在这里找到。
获取帮助
首先,阅读 示例 或 文档。如果示例无法回答您的问题,那么您可以尝试阅读文档,然后您可以联系我: [email protected]
主要链接
贡献
如果您想改进这个crate,只需提交一个issue(您可以使用示例作为模板)。issue必须包含以下标题:问题
或增强
,动机
(解决问题的原因或实现增强的原因)。添加有用的资源
对于文档和示例将非常有用。
支持的Rust版本
Turing Machine RS是用最新稳定版(2021,1.57)创建的,但这个库也支持1.56(至少)及更高版本。
许可证
本项目采用MIT许可证。
贡献
除非您明确说明,否则您提交的任何有意用于包括在Turing Machine RS中的贡献,都应按MIT许可证许可,没有其他附加条款或条件。