序言: "Vanilla"带有内置函数的元解释器

标签 prolog

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/

相关文章:

neo4j - 图 DB 与 Prolog(或 miniKanren)

prolog - 更好地理解序言

prolog - Prolog 中的算术,使用 2 的幂表示一个数字

传递给库元谓词的目标的模块扩展

Prolog 列表中的唯一值

macos - 通过 Mac 终端运行 SWI Prolog

scala - 你能用 Scala 进行逻辑编程吗?

java - JPL 库在多线程程序中的意外行为(Java 和 Prolog 的接口(interface))

prolog - 根据列表中的分隔符拆分序言列表?

list - Prolog:如何从复杂术语中提取列表