Yes, a Prolog interpreter can handle goal double(Z ). It first binds Z = [], since [] = [] ++ []. If backtracked into, it binds Z to [A, A ], where A is a new variable, since [A, A ] = [A ] ++ [A ]. If backtracked into again, it binds Z to [A, B, A, B ], where A and B are new variables. It can generate infinitely many solutions.