#logic-programming #goal #variables #state #framework #bindings #fail

rslogic

rslogic 是一个受 µKanren 启发的 Rust 逻辑编程框架

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2016年2月6日

#1312数学

MIT 许可证

24KB
487

rslogic

rslogic 是一个受 µKanren 启发的 Rust 逻辑编程框架。

API 文档

逻辑语句由 变量状态目标 组成。创建一个初始状态,然后从中获取一些变量(以及结果状态)。构建一个由变量绑定、逻辑运算(AND、OR)或谓词组成的目标。然后使用生成变量的状态评估目标。评估目标返回该语句的所有可能解,以包含变量绑定的状态数量形式。

use rslogic::state;
use rslogic::state::{Unif, State, PossibleStates};
use rslogic::goal;
use rslogic::goal::{Goal, fail, unify_val, unify_vars, conj, disj, pred};

let s = state::State::<i32>::empty();
let (v1, s) = s.make_var();
let (v2, s) = s.make_var();

let n = 123;
let g = goal::conj(goal::unify_vars(&v1, &v2), goal::unify_val(&v2, n));

let results = g.eval(&s);
assert_eq!(results.len(), 1);
let bound_value = results[0].get(&v1).unwrap();
assert_eq!(bound_value, &n);

此示例创建了两个变量 v1v2,然后组装了一个逻辑表达式,相当于 (v1 = v2) && (v2 = 123)。当评估时,结果状态将 123 绑定到 v1v2

无运行时依赖