Prolog 获取所有谓词,这些谓词是动词,也是谓词

Prolog 获取所有谓词,这些谓词是动词,也是谓词,prolog,metaprogramming,Prolog,Metaprogramming,我在一个.pl文件中包含以下内容: ... verb(love). verb(think). love(mom, dad). noun(head). insert(Pre):- Pre =.. [N | Param], assertz(verb(N)), assertz(Pre). insertAll:- insert(walk(henry, park)), insert(punch(ken, henry)). :-insertAll. getAll(N):-verb(N), current

我在一个.pl文件中包含以下内容:

...
verb(love).
verb(think).
love(mom, dad).
noun(head).

insert(Pre):- Pre =.. [N | Param], assertz(verb(N)), assertz(Pre).
insertAll:- insert(walk(henry, park)), insert(punch(ken, henry)).
:-insertAll.

getAll(N):-verb(N), current_predicate(N/2).

...
我想得到所有的谓词,它们都是动词,并且是arity为2的谓词

getAll(N).
输出:

Result = [love].

您的代码工作得很好,唯一的问题是您需要指定谓词是动态的

您的.pl文件

...

:-dynamic verb/1

verb(love).
verb(think).
love(mom, dad).
noun(head).

insert(Pre):- Pre =.. [N | Param], assertz(verb(N)), assertz(Pre).
insertAll:- insert(walk(henry, park)), insert(punch(ken, henry)).
:-insertAll.

getAll(N):-verb(N), current_predicate(N/2).

...
查询

getAll(N).
输出

N = love ;
N = walk ;
N = punch.