even(L,L). even([a,a|L],R) :- even(L,R). odd([a|L],L). odd([a,a|L],R) :- odd(L,R). foo(L,R) :- even(L,[eo|S]), odd(S,R). foo(L,R) :- odd(L,[oe|S]), even(S,R). foo(L) :- foo(L,[]).