我想知道是否有一个只有一条规则的纯 Prolog 元解释器。通常的 Prolog vanilla 元解释器有两个规则。内容如下:
solve(true).
solve((A, B)) :- solve(A), solve(B). /* rule 1 */
solve(H) :- program(H, B), solve(B). /* rule 2 */
这个 Prolog vanilla 元解释器使用两个规则/* rule 1 */
和/* rule 2 */
. 剩下的就是事实。执行的程序由程序事实表示。这是一个示例程序:
program(append([], X, X), true).
program(append([X|Y], Z, [X|T]), append(Y, Z, T)).
program(nrev([], []), true).
program(nrev([H|T], R), (nrev(T, S), append(S, [H], R))).
还有一个示例查询:
?- solve(nrev([1,2,3], X)).
X = [3, 2, 1] .
有没有办法将程序以不同的方式表示为事实,然后编写一个不同的元解释器,它只使用事实,除了一个规则而不是两个规则?适用于所有纯 Prolog 程序的东西,而不仅仅是 nrev 示例?