我正在尝试编写一个Prolog元解释器来选择目标执行的顺序,例如首先使用最少数量的参数执行所有目标。在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:
我从香草元解释开始这是错误的。
Ex。 A = a(x,y),B =(b(x,y,z),c(x))我想执行c,然后a,然后b。 - 而在这种方法中,我会得到c,b,然后a。 我正在考虑改变列表中的目标,但我不太确定。
任何想法?
没有在你的程序的逻辑不断深入,你会发现,在第二个上市的第4行有一个' Args> Args'(它永远不会是真的),而我认为你的意思是说'Args> Args2'? – 2013-03-25 10:12:34
在这里发帖的错误,我会解决它! – Enoon 2013-03-25 10:37:25
阅读这个不错的介绍:http://web.student.tuwien.ac.at/~e0225855/acomip/acomip.html – false 2013-03-25 15:27:06