私は、目標の実行順序を選択するために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の順に取得します。リスト内の目標を変換することを考えていますが、よくわかりません。
何か案は?