6 个版本
0.1.6 | 2021 年 9 月 18 日 |
---|---|
0.1.5 | 2021 年 6 月 5 日 |
0.1.4 | 2020 年 12 月 6 日 |
0.1.3 | 2020 年 11 月 5 日 |
0.1.1 | 2020 年 9 月 15 日 |
#19 in #logic-programming
每月 42 次下载
在 proto-vulcan 中使用
88KB
2K SLoC
proto-vulcan
A relational logic programming language embedded in Rust. It started as a yet another miniKanren
, but has already evolved into its own language with miniKanren at its core.
In addition to core miniKanren language, proto-vulcan currently provides support for
- miniKanren-like breadth-first and Prolog-like depth-first search.
- 复合类型 (示例)
- Disequality constraints CLP(Tree)
- 有限域约束 CLP(FD)
- 各种运算符:anyo, conda, condu, onceo, project
- 模式匹配:match, matche, matcha, matchu
- 在 proto-vulcan 中嵌入 Rust 代码
- 用户扩展接口
The language is embedded into Rust with macros which parse the language syntax and convert it into Rust. The language looks a lot like Rust, but isn't. For example, fresh variables are presented with Rust closure syntax, and pattern matching looks like Rust match.
示例
extern crate proto_vulcan;
use proto_vulcan::prelude::*;
fn main() {
let query = proto_vulcan_query!(|q| {
conde {
q == 1,
q == 2,
q == 3,
}
});
for result in query.run() {
println!("q = {}", result.q);
}
}
The example program produces three solutions
q = 1
q = 2
q = 3
在 Rust 中嵌入
To embed proto-vulcan in Rust, four macros are used: proto_vulcan!
, proto_vulcan_closure!
, proto_vulcan_query!
, and lterm!
.
proto_vulcan!(<goal>)
声明一个 Proto-vulcan 目标,并返回一个类型为Goal
的 Rust 变量。proto_vulcan_closure!(<goal>)
声明一个 Proto-vulcan 目标,并返回一个类型为Goal
的 Rust 变量。目标表达式在目标评估时按需评估。闭包将拥有闭包内引用的所有变量的所有权。proto_vulcan_query!(|a, b, c| { <goal> })
定义了一个具有查询变量a
、b
和c
的 Proto-vulcan 查询。返回值是一个Query
-struct,当调用run
时,它会产生一个迭代器,可以用来遍历逻辑程序的有效解。迭代器返回一个具有查询变量命名的字段的 struct。lterm!(<tree-term>)
在 Rust 代码中声明了一个逻辑树项,可以传递给 proto_vulcan! 或 proto_vulcan_query! 中的 proto-vulcan 程序,或与结果进行比较。
许可证
根据以下任一许可证授权:
- Apache License,版本 2.0 (LICENSE-APACHE 或 http://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则根据 Apache-2.0 许可证定义的,你有意提交以包含在工作中的任何贡献,都应按上述方式双重许可,而不附加任何额外条款或条件。
依赖
约 1.5MB
约 35K SLoC