是否有可能定义一个列表,它由谓词,如何调用谓词。
另外,是否有可能一个谓词传递到另一个谓词(如通过原子)?
例:
pre1:- something.
pre2(Predicate1, List):-
call(Predicate1),
append([Predicate1], List, R),
.....
是否有可能定义一个列表,它由谓词,如何调用谓词。
另外,是否有可能一个谓词传递到另一个谓词(如通过原子)?
例:
pre1:- something.
pre2(Predicate1, List):-
call(Predicate1),
append([Predicate1], List, R),
.....
你不能存储谓词列表,但你可以存储方面 (或仿函数)和呼叫术语目标 。
下面是测试一个术语是否具有仿函数列表中描述的属性谓词:
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)
将有同样的效果。 它可能仍然是值得的有关学习=..
,不过,因为你可以在别人的代码遇到它。