有没有办法强制prolog CLI只返回我感兴趣的变量的查询结果?一个简单的例子是:
?- mother(M, C1), father(F, C1).
返回所有M
,F
和C1
的绑定。但我只对M
和F
感兴趣,而C1
只是杂乱无章。在这个简单的例子中,它不错,但对于使用许多帮助变量的较长查询,它会更加令人烦恼。
是否有一种通过查询表达的简单方法;我的意思是没有定义单独的规则?
干杯, 亚切克
答案 0 :(得分:4)
非常直接的方法是使用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.
这显然变得越有用,你想要投射的变量就越多。您只需要指定想要顶层报告的变量。
答案 1 :(得分:2)
在SWI-Prolog中,库(yall)提供您所需的功能,以及更多。
?- {M,F}/(mother_child(M, C),father_child(F, C)).
M = m,
F = f.
答案 2 :(得分:0)
答案 3 :(得分:0)
对于SWI-Prolog,它提供一个标志来隐藏以下划线开头的变量。要更改设置,请执行目标
set_prolog_flag(toplevel_print_anon, false).
在SWI-Prolog会话中。或者,您可以将其添加到.swiplrc
中。
https://stackoverflow.com/a/34917391/2471388提供了示例的详细答案。