1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2016年2月6日 |
---|
#1312 在 数学
24KB
487 行
rslogic
rslogic 是一个受 µKanren 启发的 Rust 逻辑编程框架。
逻辑语句由 变量、状态 和 目标 组成。创建一个初始状态,然后从中获取一些变量(以及结果状态)。构建一个由变量绑定、逻辑运算(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);
此示例创建了两个变量 v1
和 v2
,然后组装了一个逻辑表达式,相当于 (v1 = v2) && (v2 = 123)
。当评估时,结果状态将 123
绑定到 v1
和 v2
。