This answer作者 Jan Burse 展示了 Prolog 中元解释器的最简单实现之一:
solve(true) :- !.
solve((A,B)) :- !, solve(A), solve(B).
solve(H) :- clause(H,B), solve(B).
我想扩展这个解释器,以便它可以调用内置函数。原版无法处理诸如
solve(member(X, [1,2,3,4]))
之类的调用。 .这可以使用 ISO 谓词吗?如果没有,是否可以使用 SWI-Prolog 谓词?
最佳答案
我想 predicate_property/2
可能对您的任务有用。
顾名思义,该谓词将谓词(头部)与一个或多个属性相关联。
例如:
?- predicate_property((A,B), P)。
P = 解释;
P = 可见;
P = 内置 ;
P = 静态;
P =imported_from(系统);
等等。
从这些属性中,您可以推断出谓词是否是内置的,并直接调用它。
它也可以在 SICStus 中找到.
但要注意:并非所有内置谓词在直接调用时都保留其语义。我认为讨论它们是什么以及如何解释它们非常值得自己提出问题。
关于序言: "Vanilla"带有内置函数的元解释器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46537856/