我需要一个查询,这将从我的列表中删除我所有变量和重复。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