リストからすべての変数と重複を削除するクエリが必要です。
例:
?- 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).