在Prolog的谓词的列表(List of predicates in Prolog)

2019-06-24 02:47发布

是否有可能定义一个列表,它由谓词,如何调用谓词。

另外,是否有可能一个谓词传递到另一个谓词(如通过原子)?

例:

pre1:- something.
pre2(Predicate1, List):-
    call(Predicate1),
    append([Predicate1], List, R),
    .....

Answer 1:

你不能存储谓词列表,但你可以存储方面 (或仿函数)和呼叫术语目标

下面是测试一个术语是否具有仿函数列表中描述的属性谓词:

has_properties([], _).
has_properties([P|Ps], X) :-
    Goal =.. [P, X],            % construct goal P(X)
    call(Goal),
    has_properties(Ps, X).

用法:

% is 4 a number, an integer and a foo?
?- has_properties([number, integer, foo], 4).

这个问题的答案查询将取决于你的定义foo/1 ,当然。 见我的解释=..如果需要的话。

编辑 :作为@false在评论报告,这是没有必要使用=.. ,因为Goal =.. [P, X], call(Goal)可以被替换为call(P, X)将有同样的效果。 它可能仍然是值得的有关学习=.. ,不过,因为你可以在别人的代码遇到它。



文章来源: List of predicates in Prolog
标签: list prolog