我正在尝试编写一个 Prolog 元解释器来选择目标执行的顺序,例如首先使用最少数量的参数执行所有目标。
我从原版元解释器开始:
solve2(true).
solve2(A) :- builtin(A), !, A.
solve2((A,B)) :- solve2(A), solve2(B).
solve2(A) :- clause(A,B), solve2(B).
然后我去了类似的东西
solve2(true).
solve2(A) :- builtin(A), !, A.
solve2((A,B)) :- count(A,Args), count(B,Args2), Args<Args2, solve2(A), solve2(B).
solve2((A,B)) :- count(A,Args), count(B,Args2), Args>Args2, solve2(B), solve2(A).
solve2(A) :- clause(A,B), solve2(B).
但是如果执行第 4 行,那么整个块 B 在 A 之前执行,这是错误的。
前任。A=a(x,y), B=(b(x,y,z), c(x)) 我想执行 c,然后是 a,然后是 b。- 在这种方法中,我会得到 c,b,然后是 a。我正在考虑改变列表中的目标,但我不太确定。
有任何想法吗?