19 个版本
0.3.16 | 2024 年 2 月 20 日 |
---|---|
0.3.15 | 2023 年 10 月 18 日 |
0.3.14 | 2023 年 8 月 3 日 |
0.3.13 | 2023 年 1 月 17 日 |
0.3.4 | 2021 年 7 月 6 日 |
#219 in Rust 模式
129 个月下载量
355KB
7.5K SLoC
swipl-rs swipl 包
这是 swipl-rs 的核心包,它实现了对 SWI-Prolog 的高级接口(封装了 swipl-fli
包),并公开了所有用于生成绑定、外部谓词定义和 blob 类型的宏(公开了 swipl-macros
包)。
使用 swipl-rs
在您的 Cargo.toml 文件中的依赖项下添加以下行
swipl = "0.3"
然后在您的代码中使用 swipl 导入
use swipl::prelude::*;
请参阅此存储库中的 示例 和文档以获取更多指导。
构建 SWI-Prolog 外部库
为了使用此库构建 SWI-Prolog 可以使用的项目,您必须将您的 crate-type
设置为 cdylib
,并提供一个类似于以下的主函数
#[no_mangle]
pub extern "C" fn install() {
register_predicate_a();
register_predicate_b();
// ..etc
}
通过 predicates!
宏定义的所有谓词都有一个相应的 register_<name>
函数,您需要在 install
函数内部调用此函数,使此谓词对 Prolog 可知。此外,您还可以在此处执行在加载时需要执行的任何其他操作。
例如,请参阅 示例项目。
构建完成后,您的外部库可以在 Prolog 中按如下方式加载
?- use_foreign_library('target/debug/libswipl_module_example.so').
true.
(替换您的项目名称,如果您进行了发布构建,则替换发布为调试)
测试
在构建时,低级别的 swipl-fli
包将自动发现您的 swipl 安装并链接到该安装。然而,此安装的共享对象可能不在您的路径上。实际上,通常不是这样。这意味着您不能直接运行 cargo test
来运行您的单元测试,因为此链接位置没有存储在任何地方。
为了运行单元测试,请考虑安装 cargo-swipl
,方法如下
cargo install cargo-swipl
然后您可以执行 cargo swipl test
来运行测试。 cargo-swipl
会以与 swipl-fli
构建相同的方式自动发现您的 swipl 安装,并在调用 cargo test
之前将其添加到加载路径中。
依赖关系
~2.8–5.5MB
~102K SLoC