有没有办法强制 prolog CLI 只返回我感兴趣的变量的查询结果?一个简单的例子是:
?- mother(M, C1), father(F, C1).
Run Code Online (Sandbox Code Playgroud)
它返回所有M,F和 的绑定C1。但我只对Mand感兴趣F,而C1只是混乱。在这个简单的例子中,这还不错,但是对于具有许多辅助变量的较长查询,它更令人烦恼。
有没有一种简单的方法可以通过查询来表达它;我的意思是没有定义单独的规则?
干杯,杰克
一个非常直接的方法是library(lambda)由 Ulrich Neumerkel使用。
例如,在您的情况下,鉴于示例事实:
母子(m,c)。 父亲_孩子(f,c)。
我们得到您的查询:
?- Mother_child(M, C), 父亲_孩子(F,C)。 M = 米, C = C, F = f。
我们想投影掉变量 C。
所以我们将整个查询包装在一个lambda表达式中,这样只有M和F具有全局范围,因此由顶层报告:
?- M^F +\(mother_child(M, C),
父亲_孩子(F,C))。
M = 米,
F = f。
您想要投射的变量越多,这显然变得越有用。您只需要指定您希望顶层报告的变量。
对于 SWI-Prolog,它提供了一个标志来隐藏以下划线开头的变量。更改设置执行目标
set_prolog_flag(toplevel_print_anon, false).
Run Code Online (Sandbox Code Playgroud)
在 SWI-Prolog 会话中。或者,您可以将其添加到您的.swiplrc.
/sf/answers/2444217401/提供了更详细的答案和示例。
在 SWI-Prolog 中,库 ( yall ) 提供了您需要的功能以及更多功能。
?- {M,F}/(mother_child(M, C),father_child(F, C)).
M = m,
F = f.
Run Code Online (Sandbox Code Playgroud)