无权访问 private_procedure `var/1'

No permission to access private_procedure `var/1'

我使用元编程技术在 Prolog 中编写了一个简单的统一算法(带有发生检查)。我正在使用 SWI-Prolog 7.4.2。

我想在元解释器中使用它,例如经典的 vanilla 元解释器:

solve(true) :- !.
solve((A,B)) :- solve(A), solve(B).
solve(A) :- clause(A,B), solve(B).

例如,如果我尝试 solve(odd(X)) 它会起作用,作为第一个解决方案给出 X = s(0)。 (其中子句为 odd(s(0)).odd(s(s(X))) :- odd(X).

但是如果我尝试使用 solve 执行统一算法,它就不再起作用了。因为我在统一算法中使用了像 var/1 这样的元谓词,所以我尝试了更简单的目标。

问题是这个:如果我输入 solve(var(X)),它会显示 No permission to access private_procedure 'var/1'。 我找不到有关此的有用信息,有人可以帮忙吗?谢谢。

尝试:

solve(true) :- !.
solve((A,B)) :- solve(A), solve(B).
solve(A) :- predicate_property(A,built_in), !, call(A).
solve(A) :- clause(A,B), solve(B).

但这在所有 Prolog 系统中的工作方式并不相同...但隐式提示应该可以帮助您继续前进。