Prolog:忽略输出中不需要的变量

标签 prolog swi-prolog

有没有办法强制 prolog CLI 返回仅包含我感兴趣的变量的查询结果?一个简单的例子是:

?- mother(M, C1), father(F, C1).

它返回所有MFC1的绑定(bind)。但我只对 MF 感兴趣,而 C1 只是困惑。在这个简单的示例中,这还不错,但对于具有许多帮助器变量的较长查询,它就更麻烦了。

有没有一种简单的方法可以通过查询来表达这一点;我的意思是没有定义单独的规则?

干杯, 雅采克

最佳答案

执行此操作的一个非常直接的方法是使用 library(lambda)作者:Ulrich Neumerkel。

例如,在您的情况下,给出示例事实:

mother_child(m, c).
father_child(f, c).

我们收到您的询问:

?- mother_child(M, C),
   father_child(F, C).
M = m,
C = c,
F = f.

我们想要投影变量C

因此,我们将整个查询包装在 lambda 表达式中,这样只有 MF 具有全局范围因此由顶层报告:

?- M^F+\(mother_child(M, C),
         father_child(F, C)).
M = m,
F = f.

您想要转换的变量越多,这显然变得越有用。您只需指定希望顶层报告的变量即可。

关于Prolog:忽略输出中不需要的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43183904/

相关文章:

user-interface - Logtalk 和 XPCE

recursion - Prolog中的子列表谓词

prolog - 通过示例(Prolog 语言)理解 Cut(!) 运算符的问题

Prolog - 无限循环

prolog - 替换二叉树的匹配位置的树节点

c++ - 使用 C++ 接口(interface)在 Prolog 中进行列表处理

prolog - 在 http_deamon swi prolog 上运行 make

Prolog:计算变量使列表中的对全部不同

bash - Prolog 中从字符串到列表的转换

list - Prolog:findall 但只保存一些解决方案