Prolog 不允许访问专用程序'var/1';

Prolog 不允许访问专用程序'var/1';,prolog,metaprogramming,logic-programming,Prolog,Metaprogramming,Logic Programming,我使用元编程技术在Prolog中编写了一个简单的统一算法(带有发生检查)。我使用的是SWI Prolog 7.4.2 我想在元解释器中使用它,例如经典的香草元解释器: 例如,如果我尝试solve(odd(X))它可以工作,作为第一个解决方案X=s(0)。(其中条款为奇数(s(0))。和奇数(s(X)):-奇数(X)。) 但是如果我尝试使用solve执行统一算法,它就不再有效了。由于我在统一算法中使用了var/1等元谓词,所以我尝试了更简单的目标 问题是这样的:如果我输入solve(var(X))

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

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

例如,如果我尝试
solve(odd(X))
它可以工作,作为第一个解决方案
X=s(0)
。(其中条款为奇数(s(0))。和
奇数(s(X)):-奇数(X)。

但是如果我尝试使用
solve
执行统一算法,它就不再有效了。由于我在统一算法中使用了
var/1
等元谓词,所以我尝试了更简单的目标

问题是这样的:如果我输入
solve(var(X))
,它会说
没有权限访问私有的\u过程“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系统中都不一样。。。但是隐含的暗示应该会帮助你前进

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).