无权访问 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 系统中的工作方式并不相同...但隐式提示应该可以帮助您继续前进。
我使用元编程技术在 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 系统中的工作方式并不相同...但隐式提示应该可以帮助您继续前进。