2010-04-06 28 views

回答

1

您可以通過追蹤證明信息來嘗試並擴展簡單的「香草」元譯員。 基本上,普通的香草解釋如下所示:

 
solve([]). 
solve([A|T]) :- solve_atom(A), solve(T). 

solve_atom(A) :- my_clause(A,B), solve(B). 

my_clause(doubleapp(X,Y,Z,R),[app(X,Y,I),app(I,Z,R)]). 
my_clause(app([],L,L),[]). 

您可以添加一個額外的參數來解釋跟蹤解決步驟,... 也許,你會希望使用內置的條款/ 2而不是my_clause(這樣你就不必手動插入你想要跟蹤的程序)。

我實際上爲我的演講寫了一個SICStus Prolog的(草稿)解決方案。它可以從命令行運行。 應該很容易適應SWI。 它可以生成SLD樹或And-Or-Tree的點表示形式。 我可以根據要求向您發送源代碼。

但是,也許SWI內置了一個更簡單的解決方案,我不知道。

相關問題