如何定义用户无法查询的规则?我只希望程序本身通过另一个规则调用此规则.
例如:
rule1(): - rule2().
rule2(): - 1 <5.
?-规则1().
真正
?-rule2().
(我不知道答案是什么,我只是希望这个查询失败!)
使用Logtalk对象封装谓词.只能调用您声明为public的谓词(从对象外部).Prolog模块不会阻止调用任何谓词,因为使用explcit限定会绕过显式导出的谓词列表.
一个简单的例子:
:- object(rules).
:- public(rule1/1).
rule1(X) :-
rule2(X).
rule2(X) :-
X < 5.
:- end_object.
Run Code Online (Sandbox Code Playgroud)
编译并加载上面的对象后:
?- rules::rule1(3).
true.
?- rules::rule2(3).
error(existence_error(predicate_declaration,rule2(3)),rules::rule2(3),user)
Run Code Online (Sandbox Code Playgroud)
如果你编辑目标代码并明确地将rule2/1声明为私有,那么你会得到错误:
?- rules::rule2(3).
error(permission_error(access,private_predicate,rule2(3)),rules::rule2(3),user)
Run Code Online (Sandbox Code Playgroud)
http://logtalk.org/上的更多信息和大量示例