我需要一個查詢,這將從我的列表中刪除我所有變量和重複。Prolog刪除所有變量和副本
實施例:
?- L = [1,2,3,X,Y,3,2], my_awesome_predicate(L, Res).
然後,RES應該是:[1,2,3]。
我不在乎訂單(可能是[2,3,1],[3,2,1]或其他)。
不幸的是,我有一個任務,我必須關心效率,所以我的主要問題是 - 它可以做得更快嗎?目前,我有以下代碼:
remove_variables([], []).
remove_variables([H|List], Res):- var(H), !, remove_variables(List, Res).
remove_variables([H|List], [H|Res]):- remove_variables(List, Res).
my_awesome_predicate([], []).
my_awesome_predicate(List, Res):-
sort(List, Sorted),
remove_variables(Sorted, Res).
好,你有最佳的複雜性。只能使用哈希映射才能實現更快的速度。無論如何你的名單多久了? – 2013-05-02 18:12:16
您應該在您的示例中重命名結果變量 - 現在您的'X'既是'L'中的變量又是謂詞的輸出參數;我不認爲這就是你的意圖。 – l4mpi 2013-05-02 18:16:32
@ l4mpi謝謝,更正。 – 2013-05-02 18:23:46