【发布时间】:2014-05-21 11:42:40
【问题描述】:
一些背景: 我正在编写一个工具来解析代码,产生一些要满足的约束,并尝试通过为这些约束中的变量找到令人满意的分配来解决它们(具体细节超出了重点)。
我在 Prolog 中编写了约束解决逻辑,但代码解析和约束生成是在 C++ 前端。所以我想从 C++ 调用 Prolog,我目前正在通过 SWI-Prolog API 执行此操作。我需要提供有关已解析代码(例如变量名)的 Prolog 求解器事实和生成的约束以解决它们。现在,我通过 C++ API 调用 assert(fact) 来提供这些事实(首先在 Prolog 求解器中将这些谓词声明为动态),然后通过查询求解器。但是,对于不是真正动态的事实,我厌倦了以这种方式使用断言。
是否有向 Prolog 求解器提供这些非动态事实的首选方式?还是断言它们是我唯一/最好的选择?
明确地说,我不想在 .pl 文件中发出事实列表,然后使用查询此 .pl 文件的求解器逻辑启动一个单独的进程,因为我想要求解的结果在我调用求解器的 C++ 基础架构中可用。
很抱歉,如果这个问题已经得到解答,我是 Prolog 的新手,无法找到相关的搜索词!
提前感谢您的任何建议!
【问题讨论】: