【发布时间】:2019-09-08 13:27:31
【问题描述】:
我使用元编程技术在 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'。
我找不到有关此的有用信息,有人可以帮忙吗?谢谢。
【问题讨论】:
标签: prolog metaprogramming logic-programming