获取动词的所有谓词并作为谓词

时间:2016-03-18 15:15:42

标签: 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_predicate(N/2).

...

我希望获得所有谓词的谓词,并且是一个带有arity 2的谓词

getAll(N).

输出:

Result = [love].

1 个答案:

答案 0 :(得分:0)

您的代码完美无缺,唯一的问题是您需要指定动词是动态的。

您的.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.