有没有办法强制prolog CLI只返回我感兴趣的变量的查询结果?一个简单的例子是:
?- mother(M, C1), father(F, C1).
它返回所有M
,F
和C1
的绑定。但我只对M
和F
感兴趣,而C1
只是杂乱无章。在这个简单的例子中,它并不坏,但对于具有许多辅助变量的较长查询,它更令人烦恼。
是否有一种通过查询表达的简单方法;我的意思是没有定义单独的规则?
干杯,Jacek
一个非常直截了当的方法是使用Ulrich Neumerkel的library(lambda)
。
例如,在您的情况下,给出样本事实:
mother_child(m, c). father_child(f, c).
我们得到您的查询:
?- mother_child(M, C), father_child(F, C). M = m, C = c, F = f.
我们想抛弃变量C
。
因此,我们将整个查询包装在lambda表达式中,这样只有M
和F
具有全局范围,因此由toplevel报告:
?- M^F+\(mother_child(M, C), father_child(F, C)). M = m, F = f.
这显然变得越有用,你想要投射的变量就越多。您只需指定要顶层报告的变量。
在SWI-Prolog中,库(yall)提供您所需的功能,以及更多功能。
?- {M,F}/(mother_child(M, C),father_child(F, C)).
M = m,
F = f.
在SWI-Prolog的情况下,它提供了一个标志来隐藏以下划线开头的变量。要更改设置,请执行目标
set_prolog_flag(toplevel_print_anon, false).
在SWI-Prolog会议中。或者,您可以将它添加到您的.swiplrc
。
https://stackoverflow.com/a/34917391/2471388提供了更详细的答案和示例。