这个答案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 谓词?
I think predicate_property/2可能对您的任务有用。
顾名思义,这个谓词将一个谓词(中心词)与一个或多个特性.
例如:
?- predicate_property((A,B), P).
P = interpreted ;
P = visible ;
P = built_in ;
P = static ;
P = imported_from(system) ;
etc.
从这些属性中,您可以推断出谓词是否是built-in,然后直接调用它。
它也可用于SICStus.
但请注意:并非所有内置谓词在直接调用时都保留其语义。我认为讨论它们是什么以及如何解释它们本身就很值得。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)