Prolog:找到对某些术语 T 成立的所有一元谓词 P_1
Prolog: Finding all unary predicates P_1 that hold true for some term T
我有一些事实,例如:
person(david).
student(david).
我需要找到 david
所在的函子。所以我需要 post 查询,例如:
some_query(david)
我需要答案
person
和
student
.
我如何在 Prolog 中执行此操作?
谢谢!
如果不求助于解释器提供的一些特殊谓词,这是不可能的,即,这不再是纯粹的 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
.
我有一些事实,例如:
person(david).
student(david).
我需要找到 david
所在的函子。所以我需要 post 查询,例如:
some_query(david)
我需要答案
person
和
student
.
我如何在 Prolog 中执行此操作? 谢谢!
如果不求助于解释器提供的一些特殊谓词,这是不可能的,即,这不再是纯粹的 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
.