gpt4 book ai didi

prolog - 无权限访问 private_procedure `true/0'

转载 作者:行者123 更新时间:2023-12-04 10:14:07 25 4
gpt4 key购买 nike

我正在尝试使用带有“if”和“and”的原版元解释器。

这是我的代码:-

:- op( 600, xfy, if).
:- op( 500, xfy, and).
findnum(X,X).
findnum(X,[X|Tail]).
findnum(X,[Y|Tail]):-
findnum(X,Tail).

prove(true).
prove((A,B)):- !,prove(A),prove(B).
prove(A and B):-
!,prove(A),prove(B).
prove(A):-
clause(A,B),
prove(B).

当两个条件都为真时。
?-prove((findnum(a,[a,b,c]) and findnum(a,[a,b,c]))).
true

当第一个条件为假时。
?-prove((findnum(a,[b,b,c]) and findnum(a,[a,b,c]))).
false

但是当第二个条件为 false 时,它​​返回错误 No permission to access private_procedure `true/0'
?-prove((findnum(a,[a,b,c]) and findnum(a,[b,b,c]))).
ERROR: No permission to access private_procedure `true/0'

请帮忙,谢谢。

最佳答案

该错误是由于尝试调用 clause/2 而导致的。内置谓词的谓词。最小的解决方法是修改元解释器的第一个子句:

prove(true) :- !.

这将避免在 prove(true) 上回溯目标尝试使用元解释器的最后一个子句,从而导致该错误。更通用的解决方法是添加以下子句:
prove(A) :-
predicate_property(A, built_in),
!,
call(A).

IE。
prove((A,B)):-
!,
prove(A),
prove(B).
prove(A and B):-
!,
prove(A),
prove(B).
prove(A) :-
predicate_property(A, built_in),
!,
call(A).
prove(A):-
clause(A,B),
prove(B).

关于prolog - 无权限访问 private_procedure `true/0',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61167280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com