Prolog:找到所有一致的谓词P_1,在某个术语T中保持为真

时间:2015-10-24 04:32:07

标签: prolog

我有一些事实:

person(david).

student(david).

我需要找到david所在的仿函数。所以我需要发布一个类似的查询:

some_query(david)

我需要答案 personstudent

我如何在Prolog中执行此操作? 谢谢!

1 个答案:

答案 0 :(得分:1)

如果不诉诸解释器提供的某些特殊谓词,这是不可能的,即,这不再是纯粹的Prolog,但对于swi-prolog,这是有效的:

findFor(Const, X) :-
    current_predicate(X, Z),
    not(predicate_property(Z, built_in)),
    Z =.. [_, _],
    Y =.. [X, Const],
    call(Y).

然后只需致电:findFor(david, X),或者如果您希望一个查询中的所有答案都使用findAll